背景:iOS7之前控制器的self.view的Y的0點(diǎn)是在Navgationbar的底部開始的. iOS7之后,蘋果推行全屏布局控制器的self.view的Y的0點(diǎn)是屏幕頂部.
- 第一坑:如果你的self.view的第一個(gè)視圖是scrollView類視圖. eg: 如果你把一個(gè)tableView的Y 約束設(shè)置為距離self.view.Y 為64.看起來很和諧,剛好是navgationbar 44 + 狀態(tài)欄20 = 64 的距離.在storyboard上看上去一切沒有問題. 當(dāng)你跑起來發(fā)現(xiàn)tableview的里面的cell Y值多了64.note:下圖的效果是:UIViewController的加一個(gè)Tableview. 如下圖:
因?yàn)閕OS7之后多了一個(gè)新特性(automaticallyAdjustsScrollViewInsets),當(dāng)控制器的self.view的第一個(gè)視圖是scroview類視圖時(shí). 會(huì)自動(dòng)調(diào)整scrollView視圖里面的子視圖的的Y值往下移64點(diǎn).也就是說tableview的Y值還是屏幕的頂部0點(diǎn),而cell自動(dòng)下調(diào)了64.想想是不是很貼心.怕你的cell的內(nèi)容被navgationbar擋住了.fuck 加上之前設(shè)置的距離 64加上自動(dòng)調(diào)整的64 就成了 128.
經(jīng)測試storyboard設(shè)置y的約束為距離 top layout guide.bottom為0 也一樣會(huì)造成上圖的效果.
- 解決方法
- 在控制器里設(shè)置 self.automaticallyAdjustsScrollViewInsets = NO;
- 在storyboard 取消
設(shè)置tableView.Y 距離self.view.Y 為0
-
第二坑: 如果設(shè)置navgationBar的barTinColor顏色或者圖片, 你會(huì)發(fā)現(xiàn)設(shè)置好的顏色跟圖片. 跟原來的圖片顏色不一樣.navgationBar會(huì)半透明化. 導(dǎo)致有色差. 設(shè)置self.navgationBar.translucent = NO; 取消半透明,會(huì)發(fā)現(xiàn)self.view的Y值不是屏幕的頂部,而是navgationBar的底部. 如果之前設(shè)置距離self.view.Y = 64 的話就會(huì)發(fā)現(xiàn)多64個(gè)點(diǎn)的距離如下圖
經(jīng)測試設(shè)置控制器的self.edgesForExtendedLayout = UIRectEdgeNone;也會(huì)導(dǎo)致self.view Y原點(diǎn)下移64. 導(dǎo)致跟iOS6時(shí)代一樣Y原點(diǎn)是在Navgationbar的下面.跟上圖一樣的效果.
解決方案 設(shè)置tableView.Y 距離self.view.Y 為0. 或者設(shè)置導(dǎo)航欄為半透明self.navgationBar.translucent = YES; 這樣self.view的Y就在屏幕的最頂部.