从 iOS7 之后,所有的 UINavigationBar 默认都是透明的了,同时 View Controller 全部都使用全屏的 layout。为了提供更多调整 view 的选项,苹果又引入了 edgesForExtendedLayout, extendedLayoutIncludesOpaqueBars,automaticallyAdjustsScrollViewInsets 这几个属性用于控制 VC 的 view layout。
1、translucent属性:当设置为YES时,导航条会变成半透明,并且frame是从最顶上开始计算的;当设置成NO的时候,导航条就不透明了,并且frame是从导航条的底下开始计算的。
2、当导航条的translucent属性为NO的情况下,如果还是希望Frame充满满屏的话,可以设置VC的extendedLayoutIncludesOpaqueBars属性为YES。这时如果希望修改导航条的透明度(透明不是隐藏),可以使用一下方法:
[[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:0.0];
3、当导航条的translucent属性为YES的情况下,如果希望Frame是从导航条最底部(64)开始计算,可以设置VC的edgesForExtendedLayout属性为UIRectEdgeNone,默认的是UIRectEdgeAll
4、设置隐藏:
[self.navigationController setNavigationBarHidden:YES animated:YES];
5、去掉导航条底部的那条线
if ([UINavigationBar instancesRespondToSelector:@selector(setShadowImage:)]){
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
}
6、对于scrollView的设置:automaticallyAdjustsScrollViewInsets这个参数默认为 YES,其作用是把子 View 中最下层的 ScrollView 的 UIEdgeInsets 进行调整,这样 TableView 的 Cell 位置就正确地显示在导航栏下方的位置了。
如果你强制把 automaticallyAdjustsScrollViewInsets 设置成 NO,就会出现下面tableView最上面会有一部分会被导航条遮住。