记录UINavigationBar 透明设置以及对 frame 的影响

记录UINavigationBar 透明设置以及对 frame 的影响_第1张图片
图片发自App

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

你可能感兴趣的:(记录UINavigationBar 透明设置以及对 frame 的影响)