edgesForExtendedLayout && extend

2021-12-29  本文已影响0人  小李不木

navigationBar

当translucent = YES(默认值) 时,UIViewController中self.view的原点是(0,0)

当translucent = NO时,UIViewController中self.view的原点是(0,  navigationBar.bottom ))从导航栏底部开始 64或者 88 

如果设置了背景颜色\背景图片 等于设置了 translucent = no;

当navigationBar.translucent为NO的时候,不管edgesForExtendedLayout怎么设置,view 的视图 都是从navigationBar 下方算起


tabBar

当translucent = YES(默认值) 时,UIViewController中 self.view 的底部 与屏幕保持一致,会被tabbr 遮盖。

当translucent = NO时,UIViewController中 self.view 的底部截止到 tabBar上方为止,不会被遮盖。

当设置tabBar的backgroundImage,shadowImage时,也相当于translucent = NO ,view 会被tabBar遮挡 

当translucent = NO的时候,不管edgesForExtendedLayout怎么设置,view 的视图底部 都是 在tabBar上方。

tabBar 中 设置 :self.shadowImage = [UIImage new];     self.backgroundImage = [UIImage new]; 不影响translucent = YES 。设置成具体的图片会影响。

edgesForExtendedLayout :可以根据这个属性设置view 的铺满样式。 self.view能延伸到屏幕的方向

默认情况下,从一个普通的UIViewController跳转到一个UINavigationController,view默认的展示样式是从导航栏底部开始。

可以通过设置edgesForExtendedLayout 为不同类型来控制view的样式(top, left, bottom, right)。

edgesForExtendedLayout的默认 值是UIRectEdgeAll,所以view是延伸到整个屏幕的高度,穿透了navbar 和 tabbar .

extendedLayoutIncludesOpaqueBars :不透明的条下是否可以扩展默认值是NO; ,也就是不可以扩展 ,只在不透明的时候有作用。

1:默认的 navigationBar 是半透明的:translucent = YES;  此时设置extendedLayoutIncludesOpaqueBars这个属性为YES/NO 都是没有作用的。

2:如果navigationBar不透明:translucent = NO;  VC的 view 不会穿透navigationBar 

当translucent设置为NO:  导航栏UINavigationBar不透明的时候,默认不能扩展。

此时想穿透navigationBar 要设置:extendedLayoutIncludesOpaqueBars = YES 才有效果

注意:如果状态栏不透明,即使你设置edgesForExtendedLayout为UIRectEdgeAll,extendedLayoutIncludesOpaqueBars为NO(默认),view不会延伸到状态栏底部的。

当navigationBar.translucent为NO的时候,不管edgesForExtendedLayout怎么设置,控图的原点值都是从导航栏下方算起

self.navigationController.navigationBar.translucent = NO; //这句话的意思就是让导航栏不透明且占空间位置,所以我们的坐标就会从导航栏下面开始算起。

隐藏导航栏,对于view来说,就好像没有嵌入navigationController ,即使设置了edgesForExtendedLayout 属性也没有效果。view 的起点是屏幕的左上角,与屏幕起点相同。

view被遮挡,默认被装入UINavigationController的子ViewController的view是全屏的,那么会导致子ViewController的view的上部会被UINavigationController的navigation bar 挡住。

结论:

1: 需要VC的view 占满全屏幕:

edgesForExtendedLayout = UIRectEdgeAll (默认) 

translucent = YES (默认)

translucent = NO  &&  extendedLayoutIncludesOpaqueBars = YES

self.navigationController.navigationBar.hidden = YES 


2: 需要VC的view 从navigationBar下面开始:

translucent = NO  &&  extendedLayoutIncludesOpaqueBars = NO  (extendedLayoutIncludesOpaqueBars是系统默认NO,可以不设置)

参考:

与导航栏下控件的frame相关的edgesForExtendedLayout、translucent、extendedLayoutIncludesOpaqueBars、automaticallyAdjustsScrollViewInsets等几个属性的详解 - Soul丶凯少 - 博客园

edgesForExtendedLayout&& extendedLayoutIncludesOpaqueBars&&translucent_诺离〆的博客-CSDN博客

UINavigationController的导航栏的遮挡和透明_forwardto9的专栏-CSDN博客

tabbar怎么些_设置导航栏和TabBar的一些属性_weixin_39795065的博客-CSDN博客

iOS edgesForExtendedLayouts用到的适配 - 简书

上一篇下一篇

猜你喜欢

热点阅读