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

图片发自简书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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,573评论 1 14
  • 1.nav1.navigationBar.barStyle=UIBarStyleBlack; //改变导航栏背景颜...
    SadMine阅读 1,671评论 1 4
  • 当吵架变成平常,一点小事儿就可以冷战,婚期将至,不知道如我一般的人会怎么选择? 冷战,最让人厌烦的冷战,一直伴随我...
    鬼知道我是谁阅读 202评论 0 0
  • 其实我很庆幸自己能出身在云南这个地方,崇山峻岭阻隔了我们走出去的路,让我们贫穷潦倒不堪,但同样是这些深山自然,也让...
    罗星明同学阅读 437评论 1 2
  • 说实话,在高考考场上的那两天我几乎是浑浑噩噩的,可能是之前各式各样的摸底考试让人麻木了,高考在我眼里已经变成了一张...
    芊芊沐羽阅读 339评论 1 0