美文网首页
导航栏布局几个老生常谈的问题

导航栏布局几个老生常谈的问题

作者: 优雨 | 来源:发表于2018-11-02 15:54 被阅读9次

1.edgesForExtendedLayoutautomaticallyAdjustsScrollViewInsetsextendedLayoutIncludesOpaqueBars

这三个属性适用于iOS 11以前对布局的调整
edgesForExtendedLayout:当在UINavigationController内添加UIViewController的时候,用来控制UIViewController中的view的大小。当你将UIViewController的该值设置为UIRectEdgeAll(默认值)的时候,UIViewController会延伸至UINavigationBar以下铺满整个屏幕,效果如下图(红色半透明效果是导航栏设置导致的):

image

automaticallyAdjustsScrollViewInsets:当UIViewController的view或者view的第一个子View是UIScrollView及其子类的时候,有时候我们希望视图可以滚动到导航栏以下的区域,但是如果只是单纯的把edgesForExtendedLayout设置为UIRectEdgeAll的话视图最开始会有部分内容被盖在导航栏以下,将automaticallyAdjustsScrollViewInsets设置为YES(默认值)则会自动帮你调整视图的Insets使内容刚好从导航栏底下开始,如下图所示(此时edgesForExtendedLayoutUIRectEdgeAll, 列表铺满整个屏幕):

image

extendedLayoutIncludesOpaqueBars:当你将导航栏或者状态栏设为不透明的时候,你会发现即使将edgesForExtendedLayout设置为UIRectEdgeAll,view也不会扩充到导航栏或者状态栏下去,这是因为extendedLayoutIncludesOpaqueBars的默认值是NO。当将其改为YES的时候就可以实现延伸效果了。

2.additionalSafeAreaInsets和UIScrollVIew及其子类的contentInsetAdjustmentBehavior

以上是基于iOS11的safeAreaInsets出现而出现的调整布局的API

additionalSafeAreaInsets:如果你想在默认的safeAreaInset的基础上对当前的UIViewController的safeAreaInsets做一些额外的调整,那就可以使用这个属性。举个例子,如果系统当前的safeAreaInsets(top: 88.0, left: 0.0, bottom: 34.0, right: 0.0),并且你将additionalSafeAreaInsets设置为(top:5, left:5, bottom:5, right:5),那么最后的safeAreaInsets就会变成(top: 93.0, left: 5.0, bottom: 39.0, right: 5.0)。由此引申的一个问题就是永远viewSafeAreaInsetsDidChange这个回调里取获取safeAreaInset,再对视图做调整。

contentInsetAdjustmentBehavior:在iOS 11之后automaticallyAdjustsScrollViewInsets失效,将其设置为UIScrollViewContentInsetAdjustmentNeverautomaticallyAdjustsScrollViewInsets设置为NO同效,即不做任何调整(一般在基类写布局的时候会这么做)。针对其他的几个值,其中UIScrollViewContentInsetAdjustmentScrollableAxes表示如果某个方向可滚动(分为contentSize的宽或者高大于该视图宽或者高以及alwaysBounceXXX设为YES这两种情况),则其该方向的Inset将被设置为safeAreaInset的值,使可滚动方向的内容拥有足够的展示空间。UIScrollViewContentInsetAdjustmentAlways则不管可不可以滚动都预留safeAreaInset的Inset空间出来。UIScrollViewContentInsetAdjustmentAutomatic比较特殊,它在大部分情况下和UIScrollViewContentInsetAdjustmentScrollableAxes一致,但是当:

  • UIScrollView 类型的视图在水平轴方向是可滚动的,垂直轴是不可滚动的。
  • ViewController 视图里的第一个子控件是 UIScrollView 类型的视图。
  • ViewController 是 navigation 或者 tab 类型控制器的子视图控制器。
  • automaticallyAdjustsScrollViewInsets = YES

的时候,它等于UIScrollViewContentInsetAdjustmentAlways

3

相关文章

  • 导航栏布局几个老生常谈的问题

    1.edgesForExtendedLayout、automaticallyAdjustsScrollViewIn...

  • NavigationView

    一、DrawerLayout 侧面滑动导航栏。 第一个子布局:内容区。 第二个子布局:导航栏布局。 注意导航栏布局...

  • iOS导航栏使用总结

    目录: 一、设置导航栏样式二、自定义导航栏返回按钮后侧滑不可用问题三、隐藏导航栏底部的分割线四、导航栏引起的布局问...

  • iOS 导航栏遮挡UIViewController的问题

    有时候我们使用纯代码或者xib布局时会遇到导航栏遮挡布局的问题, 页面跳转后, 下级页面会被导航栏所遮挡. 如果没...

  • CSS布局 与 元素居中

    什么是布局 现有样式的布局,不能满足需求 文档流 浮动 定位 现实需要的布局: 导航栏+内容 导航栏+内容+广告栏...

  • 设置导航栏颜色, 字体大小

    取出导航栏 设置导航栏背景色 设置标题颜色和字体大小 设置布局从导航栏下开始, 把导航栏设置为不透明 设置状态栏的...

  • Framework7(07:组件之导航栏和工具栏,状态栏,侧边栏

    1.导航栏和工具栏的布局类型 在向应用添加导航栏和工具栏之前,我们需要决定使用哪种布局。 Framework7在这...

  • 日常问题

    会导致整个页面布局产生问题,会计算导航栏的高度self.navigationController.navigati...

  • CSS布局

    CSS布局 什么是布局 现有样式不能满足人们的需求 文档流 浮动 定位 人们需要: 导航栏+内容 导航栏+内容+广...

  • 直播项目笔记(一)

    颜色封装 + ClOPageView + 瀑布流 搭建主题框架 导航栏布局 改变导航栏的颜色 改变状态栏的颜色 设...

网友评论

      本文标题:导航栏布局几个老生常谈的问题

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