iOS導(dǎo)航欄布局相關(guān)

iOS 7以后在ViewController里面引進(jìn)了一系列屬性用于管理頁面布局。

下面是Apple官方提供的文檔解釋,看過之后還是覺得太過于抽象,于是用代碼來實(shí)驗(yàn)吧。
**edgesForExtendedLayout
**
The extended edges to use for the layout.
**automaticallyAdjustsScrollViewInsets
**
A Boolean value that indicates whether the view controller should automatically adjust its scroll view insets.

**extendedLayoutIncludesOpaqueBars
**
A Boolean value indicating whether or not the extended layout includes opaque bars.

edgesForExtendedLayout

新建單個(gè)頁面的項(xiàng)目,然后加上UINavigationController

示例0.png

把背景設(shè)置成紅色,界面效果如下:


示例1.png

所以可以看到在iOS7后,View的布局是默認(rèn)全屏的,Navigation Bar默認(rèn)是半透明的,于是在Navigation Bar下面可以看到紅色的背景。
- (void)viewDidLoad {
[super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeNone;
}

將edgesForExtendedLayout設(shè)置成UIRectEdgeNone,表明View是不要擴(kuò)展到整個(gè)屏幕的。頁面效果如下:

示例2.png

UIRectEdge是個(gè)枚舉類型,其他的值通過字面意思也是非常容易理解的。

 typedef enum: NSUInteger
 {
UIRectEdgeNone   = 0,  
UIRectEdgeTop    = 1 << 0, 
UIRectEdgeLeft   = 1 << 1,
UIRectEdgeBottom = 1 << 2, 
UIRectEdgeRight  = 1 << 3, 
UIRectEdgeAll = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight
} UIRectEdge;

**automaticallyAdjustsScrollViewInsets
**
這個(gè)屬性用于如果頁面是ScrollView或者UITableView,通常我們希望ScrollView或者UITableView內(nèi)容顯示是在UINavigation Bar下面。
通過設(shè)置

edgesForExtendedLayout = UIRectEdgeNone

或者

self.navigationController.navigationBar.translucent =NO;

可以讓view的布局從UINavigation Bar下面開始,不過一個(gè)副作用就是當(dāng)頁面滑動(dòng)的時(shí)候,view是沒有辦法占據(jù)全屏的。
automaticallyAdjustsScrollViewInsets就可以很好的完成這個(gè)需求。

self.automaticallyAdjustsScrollViewInsets = NO;
示例3.png

;

self.automaticallyAdjustsScrollViewInsets = YES;
示例4.png

這時(shí)可以看到UITableView的內(nèi)容會(huì)從UINavigation Bar下面開始,并且這個(gè)頁面的View還是占據(jù)整個(gè)屏幕的,所以這一個(gè)屬性完全搞定!

extendedLayoutIncludesOpaqueBars
如果狀態(tài)欄是不透明的,那么頁面的布局默認(rèn)是不會(huì)包含狀態(tài)欄的,除非將這個(gè)屬性設(shè)置成為YES。所以如果你的頁面擴(kuò)展到Navigation Bar (edgesForExtendedLayout=UIRectEdgeAll),要是這個(gè)屬性設(shè)置成NO (default), 如果狀態(tài)欄是不透明的話,頁面是不會(huì)擴(kuò)展到狀態(tài)欄的。

這篇文章 里面提到有些時(shí)候automaticallyAdjustsScrollViewInsets并不能幫助我們正常計(jì)算ScrollView/TableView的Inset,這時(shí)候就自己設(shè)置咯。


self.myTableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容