美文网首页
设置导航栏透明遇到的问题

设置导航栏透明遇到的问题

作者: pigLily | 来源:发表于2021-11-29 23:34 被阅读0次

    控制rootView布局的几个属性

    UINavigationBar的translucent

    1.该属性iOS7之前就有,默认值是YES,导航栏为半透明
    2.translucent为YES时,rootView从(0,0)开始布局,会被导航栏挡住
    3.translucent为NO时,从导航栏下面开始布局

    UIViewController的edgesForExtendedLayout

    1.iOS7开始才有,默认值时UIRectEdgeAll,rootView从(0,0)开始布局,会被导航栏挡住
    2.设置为UIRectEdgeNone,从导航栏下面开始布局
    ps:当我们设置导航栏为半透明时,即translucent为NO时,即使此时edgesForExtendedLayout是UIRectEdgeAll,也会从导航栏下面开始布局,不过在这种情况下,我们可以设置UIViewController的extendedLayoutIncludesOpaqueBars为NO。下面我们会讲解UIViewController的extendedLayoutIncludesOpaqueBars属性

    UIViewController的extendedLayoutIncludesOpaqueBars

    1.iOS开始才有,默认值是NO,意思是在不透明的导航栏下也全屏显示
    2.通过将此属性值设置为YES时,解决即使导航栏不透明也从(0,0)开始布局,会被导航栏挡住

    UIViewController的automaticallyAdjustsScrollViewInsets

    1.iOS7开始才有,如果视图里面存在唯一一个UIScrollView或其子类,那么它会自动设置相应的内边距inset,这样可以让scrollView占据整个视图,又不会让导航栏、tabBar遮挡,会根据所在界面的状态栏、导航栏、tabBar的高度,自动调整scrollView的inset
    2.如果视图中存在多个scrollView或其子类,automaticallyAdjustsScrollViewInsets只会对栈顶控制器管理的第一个scrollView起作用

    UIScrollView的contentInsetAdjustmentBehavior

    1.iOS11之后,替代automaticallyAdjustsScrollViewInsets。

    总结:
    1.iOS7以后translucent默认为YES,rootView从(0,0)开始布局,修改edgesForExtendedLayout属性可以改变布局
    2.translucent为NO,rootView从导航栏底部开始布局,修改edgesForExtendedLayout属性无法改变,可以通过设置extendedLayoutIncludesOpaqueBars为YES使得从(0,0)开始布局
    2.automaticallyAdjustsScrollViewInsets默认值是YES,表示在全屏模式下会自动修改第一个添加到rootView的scrollView的contentInset为(64,0,0,0),在iPhoneX为(88,0,0,0)用来调整scrollView在全屏模式下的显示,为可以设置NO,不自适应,而是按照自己设置的显示
    3.设置UINavigationBar的背景图片可以改变导航栏背景色,如果背景图片包含alpha的色值,系统会默认将translucent设置为YES,没有包含alpha色值会将translucent设置为NO,不过这是针对没有手动设置translucent的情况,如果我们设置了translucent,那么系统就不会根据背景图片的alpha来修改translucent

    相关文章

      网友评论

          本文标题:设置导航栏透明遇到的问题

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