Navigation Controller是一個(gè)container view controller。可以在viewController中通過以下方法設(shè)置navigation 棧中viewController view的布局:
edgesForExtendedLayout屬性
默認(rèn)為UIRectEdgeAll,即使視圖中上有navigationBar,下有tabBar,那么視圖仍會延伸覆蓋到四周的區(qū)域。通過設(shè)置edgesForExtendedLayout屬性指定view邊緣要延伸的方向,可以控制視圖是否會延伸到Navigation Bar和Tool Bar下。
如果不想讓view延伸到bar下,可以將edgesForExtendedLayout屬性設(shè)置為UIRectEdgeNone,這時(shí)會發(fā)現(xiàn)bar的顏色變灰。如圖設(shè)置self.edgesForExtendedLayout = UIRectEdgeTop效果
如下代碼:
self.navigationController.navigationBar.translucent = NO; self.navigationController.toolbar.translucent = NO;
設(shè)置Navigation Bar和Tool Bar不透明,也可以實(shí)現(xiàn)view不延伸到Navigation Bar和Tool Bar下的效果,且bar的顏色不會變灰,此時(shí)edgesForExtendedLayout屬性設(shè)置失效。如圖設(shè)置self.navigationController.toolbar.translucent = NO效果
extendedLayoutIncludesOpaqueBars屬性
屬性默認(rèn)為NO,即視圖不會延伸到不透明的bar下。如果為YES,則即使Navigation Bar或Tool Bar的translucent屬性為NO不透明,依然可以通過設(shè)置edgesForExtendedLayout屬性,實(shí)現(xiàn)視圖可以延伸到Navigation Bar或Tool Bar下。
automaticallyAdjustsScrollViewInsets
屬性默認(rèn)為YES。此時(shí)如果屏幕中有status bar、search bar、navigation bar、toolbar或 tab bar,程序會自動調(diào)整scrollView在這些視圖之間顯示,而不會被它們覆蓋。
self.edgesForExtendedLayout = UIRectEdgeAll;//默認(rèn)UIRectEdgeAll self.automaticallyAdjustsScrollViewInsets = YES;//默認(rèn)為YES
效果如下:
self.edgesForExtendedLayout = UIRectEdgeNone; self.automaticallyAdjustsScrollViewInsets = YES;//默認(rèn)為YES
效果如下:
兩種情況下automaticallyAdjustsScrollViewInsets屬性都為YES,都可以實(shí)現(xiàn)自動調(diào)整scrollView尺寸,使tableview可以在bar之間正常顯示,不會出現(xiàn)頂部或底部cell被bar遮擋的情況。仔細(xì)觀察可以發(fā)現(xiàn)self.edgesForExtendedLayout屬性為UIRectEdgeAll時(shí),tableView上下滾動時(shí)可以穿過bar,從圖3.1可以看到toolbar呈現(xiàn)出淡淡的綠色(tableview中cell的顏色)。