怎么讓self.view的Y從navigationBar下面開始計(jì)算

在iOS 7中,蘋果引入了一個(gè)新的屬性,叫做[UIViewController setEdgesForExtendedLayout:],它的默認(rèn)值為UIRectEdgeAll。當(dāng)你的容器是navigation controller時(shí),默認(rèn)的布局將從navigation bar的頂部開始。這就是為什么所有的UI元素都往上漂移了44pt。有時(shí)會(huì)加上頂部tool bar的高度 20, 20+44 = 64。而且下面tabbar也縮進(jìn)的49

解決辦法

- (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;那么就會(huì)self.view.frame是從navigationBar下面開始計(jì)算一直到屏幕底部;

如果設(shè)置成 self.edgesForExtendedLayout = UIRectEdgeNone;那么就會(huì)self.view.frame是從navigationBar下面開始計(jì)算一直到屏幕tabBar上部;

如果設(shè)置成 self.edgesForExtendedLayout = UIRectEdgeTop;那么就會(huì)self.view.frame是從navigationBar上面計(jì)算面開始計(jì)算一直到屏幕tabBar上部;

iOS7以上系統(tǒng),self.navigationController.navigationBar.translucent默認(rèn)為YES,self.view.frame.origin.y從0開始(屏幕最上部)。

此時(shí)若是添加代碼self.edgesForExtendedLayout = UIRectEdgeNone(iOS7.0以后方法);self.view.frame.origin.y會(huì)下移64像素至navBar下方開始。但是此時(shí)當(dāng)push到一個(gè)新的controller之前給當(dāng)前屏幕截圖的時(shí)候[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];,由于navBar是透明的,會(huì)出現(xiàn)64像素的黑色區(qū)域。

此時(shí)只需要把self.navigationController.navigationBar.translucent=NO即可,不需要加代碼self.edgesForExtendedLayout;

iOS7之后也增加了一個(gè)self.tabBarController.tabBar.translucent的屬性,默認(rèn)為YES。當(dāng)應(yīng)用同時(shí)使用navBar和TabBar的時(shí)候。設(shè)置self.tabBarController.tabBar.translucent=NO并且self.navigationController.navigationBar.translucent=NO時(shí)候,得到self.view.frame--->{{0, 64}, {320, 455}}。視圖的高度也改變?yōu)閚avBar和tabBar之間的455像素。當(dāng)self.navigationController.navigationBar.translucent=YES并且self.tabBarController.tabBar.translucent=NO的時(shí)候self.view.frame--->{{0, 0}, {320, 519}};其都為YES的時(shí)候self.view.frame--->{{0, 0}, {320, 568}};

注意:設(shè)置self.edgesForExtendedLayout = UIRectEdgeNone;的時(shí)候會(huì)使得navBar和tabBar都不占空間。self.view.frame--->{{0, 64}, {320, 455}}。此時(shí)iOS7默認(rèn)navBar和tabBar都是透明的。截圖的時(shí)候需要注意。

iOS6以下系統(tǒng),默認(rèn)navBar和tabBar都不占空間。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容