原文地址 http://blog.sina.com.cn/s/blog_1410870560102wu9a.htmlhtml
在iOS 7中,蘋果引入了一個新的屬性,叫作[UIViewController setEdgesForExtendedLayout:],它的默認值爲UIRectEdgeAll。當你的容器是navigation controller時,默認的佈局將從navigation bar的頂部開始。這就是爲何全部的UI元素都往上漂移了44pt。有時會加上頂部tool bar的高度 20, 20+44 = 64。並且下面tabbar也縮進的49佈局
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. if (OSVersionIsAtLeastiOS7()) { if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) { self.edgesForExtendedLayout = UIRectEdgeNone; } } }
此時只須要把self.navigationController.navigationBar.translucent=NO便可,不須要加代碼self.edgesForExtendedLayout;code
iOS7以後也增長了一個self.tabBarController.tabBar.translucent的屬性,默認爲YES。當應用同時使用navBar和TabBar的時候。設置self.tabBarController.tabBar.translucent=NO而且self.navigationController.navigationBar.translucent=NO時候,獲得self.view.frame--->{{0, 64}, {320, 455}}。視圖的高度也改變爲navBar和tabBar之間的455像素。當self.navigationController.navigationBar.translucent=YES而且self.tabBarController.tabBar.translucent=NO的時候self.view.frame--->{{0, 0}, {320, 519}};其都爲YES的時候self.view.frame--->{{0, 0}, {320, 568}};htm
注意:設置self.edgesForExtendedLayout = UIRectEdgeNone;的時候會使得navBar和tabBar都不佔空間。self.view.frame--->{{0, 64}, {320, 455}}。此時iOS7默認navBar和tabBar都是透明的。截圖的時候須要注意。blog