怎麼讓self.view的Y從navigationBar下面開始計算
原文地址:http://blog.sina.com.cn/s/blog_1410870560102wu9a.html
在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;
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都是透明的。截圖的時候需要注意。
iOS6以下系統,預設navBar和tabBar都不佔空間。
相關文章
- 雲端計算就業前景怎麼樣?linux雲端計算怎麼開始學習就業Linux
- 從零開始怎麼寫androidnativeservice?Android
- 技能樹之旅: 計算點數與從這開始
- Mysql auto_increment 重新計數(讓id從1開始)MySqlREM
- iOS 11 tableHeaderView 從navigaqtionBar 或者StatusBar下面開始iOSHeaderViewQT
- 常見計算機從零開始 D.認識計算機的組成(轉)計算機
- 如何從零開始學習Linux雲端計算的運維?Linux運維
- 為什麼程式要從0開始計數
- 雲端計算開發是什麼?雲端計算的就業前途怎麼樣?就業
- 下面的實時系統怎麼設計呢。
- 從計算機網路開始,分析ftp報文內容計算機網路FTP
- 聯想韋衛:商用雲端計算從使用者需求開始
- 為什麼計算機時間要從1970年1月1日開始算起計算機
- 為什麼計算機時間要從1970年1月1日開始算起?計算機
- 常見計算機從零開始 F.視窗介面(轉)計算機
- 彭民德:《電子計算60年》(4) 從學習蘇聯電子管計算機開始計算機
- word公式怎麼計算 word公式計算的方法公式
- 常見計算機從零開始 E.讀屏軟體的使用(轉)計算機
- 從零開始,我是怎麼做出銷售合同管理系統?
- 《從零開始學Swift》學習筆記(Day 32)——計算屬性Swift筆記
- 學用計算機從零開始 G.盲人資料庫(轉)計算機資料庫
- 常見計算機從零開始 C.文書處理(轉)計算機
- 是什麼讓我開始了元件化?元件化
- 風變程式設計Python課程:讓改變從現在開始程式設計Python
- 從計算到智算,計算產業掀起什麼樣的浪潮?產業
- word首頁不顯示頁碼怎麼設定 如何讓頁碼從第二頁開始顯示
- 零基礎怎麼開始學習UI設計?UI
- Win10計算器怎麼開啟 開啟win10計算器的2個方法Win10
- 【敏捷0】敏捷專案管理-為什麼從敏捷開始?為什麼從PMI-ACP開始?敏捷專案管理
- Python要怎麼開始(零)Python
- ###都是設計模式惹的禍-----下面不知道該怎麼寫了###設計模式
- 軟體設計是怎樣煉成的(2)——優秀設計從分析需求開始
- 雲端計算儲存之什麼是Ceph?聽聽Ceph創始人怎麼說
- win10 開始變全屏怎麼辦 win10開始介面全屏怎麼解決Win10
- 從零開始理解 Laravel 的設計哲學Laravel
- 【筆記】從0開始的程式碼審計筆記
- 雲端計算的未來怎麼發展?怎麼學習雲端計算相關技術?
- 運維從設計開始-轉載運維