self.view.frame的佈局問題

weixin_33866037發表於2017-02-09

轉自http://blog.csdn.net/zww1984774346/article/details/51730357

如果設定成 self.edgesForExtendedLayout = UIRectEdgeBottom;那麼就會self.view.frame是從navigationBar下面開始計算一直到螢幕底部;
如果設定成 self.edgesForExtendedLayout = UIRectEdgeNone;那麼就會self.view.frame是從navigationBar下面開始計算一直到螢幕tabBar上部;
如果設定成 self.edgesForExtendedLayout = UIRectEdgeTop;那麼就會self.view.frame是從navigationBar上面計算面開始計算一直到螢幕tabBar上部;
iOS7以上系統,self.navigationController.navigationBar.translucent預設為YES,self.view.frame.origin.y從0開始(螢幕最上部)。
此時若是新增程式碼self.edgesForExtendedLayout = UIRectEdgeNone(iOS7.0以後方法);self.view.frame.origin.y會下移64畫素至navBar下方開始。但是此時當push到一個新的controller之前給當前螢幕截圖的時候[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];,由於navBar是透明的,會出現64畫素的黑色區域。

此時只需要把self.navigationController.navigationBar.translucent=NO即可,不需要加程式碼self.edgesForExtendedLayout;

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}};

注意:設定self.edgesForExtendedLayout = UIRectEdgeNone;的時候會使得navBar和tabBar都不佔空間。self.view.frame—>{{0, 64}, {320, 455}}。此時iOS7預設navBar和tabBar都是透明的。截圖的時候需要注意。

相關文章