美文网首页
edgesForExtendedLayout && extend

edgesForExtendedLayout && extend

作者: 小李不木 | 来源:发表于2021-12-29 15:27 被阅读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用到的适配 - 简书

    相关文章

      网友评论

          本文标题:edgesForExtendedLayout && extend

          本文链接:https://www.haomeiwen.com/subject/fubvqrtx.html