原文地址http://blog.sina.com.cn/s/blog_1410870560102wu9a.html
在iOS 7中疏唾,蘋果引入了一個新的屬性函似,叫做[UIViewController setEdgesForExtendedLayout:],它的默認(rèn)值為UIRectEdgeAll顿天。當(dāng)你的容器是navigation controller時蔑担,默認(rèn)的布局將從navigation bar的頂部開始。這就是為什么所有的UI元素都往上漂移了44pt畔规。有時會加上頂部tool bar的高度 20, 20+44 = 64恨统。而且下面tabbar也縮進(jìn)的49
解決辦法
現(xiàn)在不用判斷iOS7了
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
{
self.edgesForExtendedLayout = UIRectEdgeNone;
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
if (OSVersionIsAtLeastiOS7()) {
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
{
self.edgesForExtendedLayout = UIRectEdgeNone;
}
}
}
如果設(shè)置成 self.edgesForExtendedLayout = UIRectEdgeBottom;那么就會self.view.frame是從navigationBar下面開始計算一直到屏幕底部畜埋;
如果設(shè)置成 self.edgesForExtendedLayout = UIRectEdgeNone;那么就會self.view.frame是從navigationBar下面開始計算一直到屏幕tabBar上部;
如果設(shè)置成 self.edgesForExtendedLayout = UIRectEdgeTop;那么就會self.view.frame是從navigationBar上面計算面開始計算一直到屏幕tabBar上部对室;
iOS7以上系統(tǒng)咖祭,self.navigationController.navigationBar.translucent默認(rèn)為YES,self.view.frame.origin.y從0開始(屏幕最上部)牺汤。
此時若是添加代碼self.edgesForExtendedLayout = UIRectEdgeNone(iOS7.0以后方法);self.view.frame.origin.y會下移64像素至navBar下方開始浩嫌。但是此時當(dāng)push到一個新的controller之前給當(dāng)前屏幕截圖的時候[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];,由于navBar是透明的追迟,會出現(xiàn)64像素的黑色區(qū)域速勇。
此時只需要把self.navigationController.navigationBar.translucent=NO即可娜亿,不需要加代碼self.edgesForExtendedLayout每瞒;
iOS7之后也增加了一個self.tabBarController.tabBar.translucent的屬性金闽,默認(rèn)為YES代芜。當(dāng)應(yīng)用同時使用navBar和TabBar的時候浓利。設(shè)置self.tabBarController.tabBar.translucent=NO并且self.navigationController.navigationBar.translucent=NO時候,得到self.view.frame--->{{0, 64}, {320, 455}}嫡秕。視圖的高度也改變?yōu)閚avBar和tabBar之間的455像素苹威。當(dāng)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}}掷酗;
注意:設(shè)置self.edgesForExtendedLayout = UIRectEdgeNone;的時候會使得navBar和tabBar都不占空間窟哺。self.view.frame--->{{0, 64}, {320, 455}}。此時iOS7默認(rèn)navBar和tabBar都是透明的浮声。截圖的時候需要注意旋奢。
iOS6以下系統(tǒng),默認(rèn)navBar和tabBar都不占空間屉符。