1.iOS7 之后,所有的 UINavigationBar 默认都是透明的了,同时 View Controller 全部都使用全屏的 layout;
2.创建一个lab;
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
label.text = @"Hello";
[self.view addSubview:label];
结果:label藏在导航栏下面。
解决办法1:
-(void)viewDidLoad {
self.edgesForExtendedLayout = UIRectEdgeNone;
}
解决办法2:把导航栏改成不透明:
self.navigationBar.translucent = NO;
3.不透明的导航栏,如果你还想让 View 充满全屏的话:
self.extendedLayoutIncludesOpaqueBars = YES;
4.对于 UITableView 来说:不需要什么设置就可以得到正确的结果;即导航栏是透明的, TableView 的 Cell 也正确的显示了。
原因在于 automaticallyAdjustsScrollViewInsets。这个参数默认设置为 YES,其作用是把子 View 中最下层的 ScrollView 的 UIEdgeInsets 进行调整,在这里是设置成 (64, 0, 0, 0),这样 TableView 的 Cell 位置就正确地显示在导航栏下方的位置了。
如果你强制把 automaticallyAdjustsScrollViewInsets 设置成 NO,TableView 的第一个 cell 跑到导航栏下面去.
5.默认透明的导航栏,在 VC 中添加一个 WebView 时:WebView 顶部的位置没有问题,但是底部的位置出现错乱了
导致没办法滚动到网页的最低端了。解决方法是:
self.extendedLayoutIncludesOpaqueBars = YES;
记录来源:
https://skyline75489.github.io/post/2015-11-27_uinavigation_bar_frame_affect.html