Navigation Controller是一個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,這時會發(fā)現(xiàn)bar的顏色變灰。如圖設(shè)置self.edgesForExtendedLayout = UIRectEdgeTop效果
如下代碼:
self.navigationController.navigationBar.translucent = NO; self.navigationController.toolbar.translucent = NO;
設(shè)置Navigation Bar和Tool Bar不透明耕腾,也可以實現(xiàn)view不延伸到Navigation Bar和Tool Bar下的效果见剩,且bar的顏色不會變灰,此時edgesForExtendedLayout屬性設(shè)置失效扫俺。如圖設(shè)置self.navigationController.toolbar.translucent = NO效果
extendedLayoutIncludesOpaqueBars屬性
屬性默認(rèn)為NO苍苞,即視圖不會延伸到不透明的bar下。如果為YES狼纬,則即使Navigation Bar或Tool Bar的translucent屬性為NO不透明羹呵,依然可以通過設(shè)置edgesForExtendedLayout屬性,實現(xiàn)視圖可以延伸到Navigation Bar或Tool Bar下疗琉。
automaticallyAdjustsScrollViewInsets
屬性默認(rèn)為YES担巩。此時如果屏幕中有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,都可以實現(xiàn)自動調(diào)整scrollView尺寸种吸,使tableview可以在bar之間正常顯示弃衍,不會出現(xiàn)頂部或底部cell被bar遮擋的情況。仔細(xì)觀察可以發(fā)現(xiàn)self.edgesForExtendedLayout屬性為UIRectEdgeAll時坚俗,tableView上下滾動時可以穿過bar镜盯,從圖3.1可以看到toolbar呈現(xiàn)出淡淡的綠色(tableview中cell的顏色)。