edgesForExtendedLayout,automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars的影響


在IOS7以后 ViewController 開始使用全屏布局的,而且是默認的行為通常涉及到布局

就離不開這個屬性 edgesForExtendedLayout,它是一個類型為UIExtendedEdge的屬性,

指定邊緣要延伸的方向,它的默認值很自然地是UIRectEdgeAll,四周邊緣均延伸,就是說,

如果即使視圖中上有navigationBar,下有tabBar,那么視圖仍會延伸覆蓋到四周的區域。

因為一般為了不讓tableView 不延伸到 navigationBar 下面, 屬性設置為 UIRectEdgeNone

UIRectEdgeAll -- default

UIRectEdgeNone 

這時會發現導航欄變灰了,處理如下就OK了

 

 self.navigationController.navigationBar.translucent = NO;

 

那 automaticallyAdjustsScrollViewInsets 呢?

當 automaticallyAdjustsScrollViewInsets 為 NO 時,tableview 是從屏幕的最上邊開始,也就是被

導航欄 & 狀態欄覆蓋


 

當 automaticallyAdjustsScrollViewInsets 為 YES 時,也是默認行為,表現就比較正常了,和

edgesForExtendedLayout = UIRectEdgeNone 有啥區別? 不注意可能很難覺察

設計師可能一眼就看穿。。。 automaticallyAdjustsScrollViewInsets 為YES 時,

tableView 上下滑動時,是可以穿過導航欄&狀態欄的,在他們下面有淡淡的淺淺紅色


extendedLayoutIncludesOpaqueBars 

首先看下官方解釋,默認 NO, 但是Bar 的默認屬性是 透明的。。。也就是說只有在不透明下才有用

但是,測試結果很軟肋,基本區別不大。。。但是對於解決一些Bug 是還是起作用的,比如說SearchBar的

跳動問題,詳情見:http://www.cnblogs.com/skyming/p/4059128.html, 其他UITableView,UIScrollView 位置的

問題多數和這3屬性相關。。

 

  • 之前碰到過一個問題。 就是利用storyboard拖動出來的控件, 在iOS7上跑老是莫名的下移。

    比如這樣(紅色區域為多余的)

     

    解決辦法:

    iOS7在Conttoller中新增了這個屬性:

    automaticallyAdjustsScrollViewInsets,當設置為YES時(默認YES),如果視圖里面存在唯一一個UIScrollView或其子類View,那么它會自動設置相應的內邊距,這樣可以讓scroll占據整個視圖,又不會讓導航欄遮蓋。

    我們設置automaticallyAdjustsScrollViewInsets這個屬性為no,就可以解決這個問題。

    如下:

    當然也可以通過修改UIViewController的edgesForExtendedLayout這個屬性來實現。

    self.edgesForExtendedLayout = UIExtendedEdgeNone;

來自網絡轉存


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM