怎麼讓self.view的Y從navigationBar下面開始計算

原文地址 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.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;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

相關文章
相關標籤/搜索