視圖控制器導(dǎo)航欄
參考
- GitHub 源碼:shinobicontrols/iOS7-day-by-day
- 天天品嘗iOS7甜點(diǎn) :: Day 20 :: View controller content and navigation bars
視圖控制器在導(dǎo)航控制器中
edgesForExtendedLayout 屬性:
擴(kuò)展的邊緣布局。該屬性僅適用于嵌入到容器中(例如 UINavigationController)的視圖控制器。窗口的根視圖控制器不對此屬性做出反應(yīng)。默認(rèn)值為 UIRectEdgeAll。
1. 默認(rèn)值 UIRectEdgeAll
UIRectEdgeAll = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight
默認(rèn)值 UIRectEdgeAll 在 Interface Builder 中的設(shè)置:

在視圖控制器中添加子視圖:
UIView *box = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
box.backgroundColor = [UIColor blueColor];
[self.view addSubview:box];
顯示效果:

2. 正確設(shè)置 UIRectEdgeNone
代碼設(shè)置:self.edgesForExtendedLayout = UIRectEdgeNone;
Interface Builder 設(shè)置:

顯示效果:

滾動視圖在導(dǎo)航控制器中
automaticallyAdjustsScrollViewInset 屬性(iOS 11 deprecate ??):
一個(gè)布爾值,指示視圖控制器是否自動調(diào)整其滾動視圖的插入內(nèi)容。
此屬性的默認(rèn)值為YES,這使容器視圖控制器知道他們應(yīng)該調(diào)整此視圖控制器視圖的滾動視圖插入,以解決狀態(tài)欄,搜索欄,導(dǎo)航欄,工具欄或選項(xiàng)卡欄所占用的屏幕區(qū)域。 如果您的視圖控制器實(shí)現(xiàn)管理其自己的滾動視圖插入調(diào)整,請將此屬性設(shè)置為NO。
設(shè)置為 NO:

效果: 滾動視圖會嵌入到導(dǎo)航欄下方,頂部第一個(gè) cell 被遮擋,無法正常顯示。
當(dāng)然,現(xiàn)在很多 App 的頁面頂部的圖片有這種效果。

設(shè)置為 YES(默認(rèn))

效果,正常顯示 cell:

表格視圖在導(dǎo)航控制器中
UITableView是UIScrollView的子類,所以我們期望和上一個(gè)滾動視圖相同的效果,用到了同樣的屬性:
automaticallyAdjustsScrollViewInsets
同樣,如果設(shè)置為 NO,TableView 的上下都會被遮擋:

而如果設(shè)置為 YES,則上下都能正常顯示:

另外的一些情形:滾動視圖或者列表視圖嵌入在 UITabBarController 中
這種情況就算設(shè)置 automaticallyAdjustsScrollViewInset = YES 也于事無補(bǔ),底部那一塊還是會被遮住。


只需要取消勾選 Under Bottom Bars 這個(gè)屬性就好:

The End.