狀態欄的edgesForExtendLayout屬性

edgesForExtendLayout是iOS7之後一個類型爲UIExtendedEdge的屬性,指定邊緣要延伸的方向,它的默認值是UIRectEdgeAll,四周邊緣均延伸,就是說,果即使視圖中上有navigationBar,下有tabBar,那麼視圖仍會延伸覆蓋到四周的區域。

self.edgesForExtendedLayout = UIRectEdgeNone;

上面的代碼用來解決UINavigationBar透明的問題。設置了UIRectEdgeNone之後,你嵌在UIViewController裏面的UITableView和UIScrollView就不會穿過UINavigationBar了,同時UIView的控件也回覆到了iOS6時代。加了這個之後UI不會上移20了,但是程序運行時,自動進入tabbar的第一個頁面時,navigationbar和tabbar會出現黑色背景閃過,

self.navigationController.navigationBar.translucent = NO;

self.tabBarController.tabBar.translucent = NO;這兩句解決。




如果即使視圖中上有navigationBar,下有tabBar,那麼視圖仍會延伸覆蓋到四周的區域。
因爲一般爲了不讓tableView 不延伸到 navigationBar 下面, 屬性設置爲 UIRectEdgeNone

(UIRectEdgeAll -- default/UIRectEdgeNone)
這時會發現導航欄變灰了,處理如下就OK了
self.navigationController.navigationBar.translucent = NO;




 automaticallyAdjustsScrollViewInsets
當 automaticallyAdjustsScrollViewInsets 爲 NO 時,tableview 是從屏幕的最上邊開始,也就是被
導航欄 & 狀態欄覆蓋
當 automaticallyAdjustsScrollViewInsets 爲 YES 時,也是默認行爲,表現就比較正常了,



automaticallyAdjustsScrollViewInsets 爲 YES edgesForExtendedLayout = UIRectEdgeNone 有啥區別?
automaticallyAdjustsScrollViewInsets 默認YES,tableView 上下滑動時,是可以穿過導航欄&狀態欄的,在他們下面有淡淡的淺淺紅色
extendedLayoutIncludesOpaqueBars,默認 NO, 但是Bar 的默認屬性是 透明的。。。也就是說只有在不透明下才有用
但是,測試結果很軟肋,基本區別不大。。。但是對於解決一些Bug 是還是起作用的,比如說SearchBar的
跳動問題,詳情見:http://www.cnblogs.com/skyming/p/4059128.html, 其他UITableView,UIScrollView 位置的
問題多數和這3屬性相關。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章