美文网首页
界面布局

界面布局

作者: 流浪的野兽 | 来源:发表于2019-07-11 23:39 被阅读0次

    UIViewController的界面布局属性:

    1、导航栏透明translucent属性默认为YES,意味着子控件以(0,0)点为坐标系布局;

    1.1、self.edgesForExtendedLayout = UIRectEdgeAll;

    1.1.1、无safearea:

    1.1.1.1、automaticallyAdjustsScrollViewInsets YES: iOS10及以下机型,根视图全屏,scrollView从0开始,根据设定的约束高度开始布局。contentInset固定64,展示出64px的inset区域。 iOS11及以上机型,根视图全屏,scrollView从0开始,根据设定的约束高度开始布局,contentInset为导航栏高-scrollView的布局高。如果scrollView的布局高<导航栏高,最终scrollView的inset区域都在导航条下,inset看不到,scrollView在导航栏下发开始展示。如果scrollView的布局高>导航栏度,则inset值为0,inset依然看不到,scrollView在布局高-导航栏高位置开始显示。 总结:子视图内容偏移到导航条下面。

    1.1.1.2、automaticallyAdjustsScrollViewInsets NO: 此种情况,根视图全屏,scrollView从0开始,根据设定的约束高度开始布局,无contentInset值。 总结:子视图在顶部,内容不偏移。

    1.1.2、safearea情况下:

    1.1.2.1、automaticallyAdjustsScrollViewInsets YES: iOS10及以下机型,根视图全屏,scrollView从0开始,根据设定的约束高度开始布局。contentInset固定64,最终展示出64px的inset区域。 总结:子视图内容偏移到导航条下面。 iOS11及以上机型,根视图全屏,scrollView从导航栏底部开始,按约束高度开始布局,即64或88开始+约束值。约束值为正,则inset值为0,视图按约束值大小向下的位置开始布局;约束值为负,scrollView的inset为约束值绝对值,约束值<导航条高度,scrollview在导航条下开始布局,约束值>导航条高度,超过部分的视图开始被导航条压到。 总结:子视图从导航条下方开始展示。

    1.1.2.2、automaticallyAdjustsScrollViewInsets NO: iOS10及以下,根视图全屏,scrollView从设定的布局高度开始布局。contentInset固定0。 总结:子视图在顶部,内容不偏移。 iOS11情况与automaticallyAdjustsScrollViewInsets YES情况一致。 总结:子视图从导航条下方开始展示。

    1.2、self.edgesForExtendedLayout = UIRectEdgeNone;根视图为(0,64)开始布局,与导航条不透名的情况一样。

    2、导航栏不透明,根视图以(0,64)或(0,88)开始布局,根视图高度为屏幕高度-导航条高度。根视图完全在可视区域,子视图从根视图边缘指定的约束位置开始布局。

    2.1、self.edgesForExtendedLayout = UIRectEdgeAll不起作用。

    2.1.1、safearea、automaticallyAdjustsScrollViewInsets也均不起作用,scrollView不被遮挡,view不被遮挡。


    safearea

    iOS9或10上导致布局问题,应该是低版本系统对safearea兼容性不好,需要设置self.edgesForExtendedLayout = UIRectEdgeNone;

    extendedLayoutIncludesOpaqueBars

    属性意思是,延伸视图包不包含不透明的Bar,不透明默认值为NO,透明时默认为YES。

    可以手动设置为YES,无论什么情况都延伸布局;

    可以手动设置为NO,无论什么情况都不延伸布局。

    automaticallyAdjustsScrollViewInsets

    属性意思是自动计算滚动视图的内容边距,设为YES自动处理insets值,设为NO不处理insets值。

    但是automaticallyAdjustsScrollViewInsets这个属性在iOS11上过期了。

    我们需要使用UIScrollView的contentInsetAdjustmentBehavior属性来替代它(从viewcontroller的属性变为了view的属性)。


    View的界面布局属性:

    edgesForExtendedLayout:

    指定视图边缘延伸的方向,默认为UIRectEdgeAll。

    contentInsetAdjustmentBehavior:

    iOS11替代Controller的automaticallyAdjustsScrollViewInsets这个属性,枚举值包括以下4种:

    1、automatic 和scrollableAxes一样,scrollView会自动计算和适应顶部和底部的内边距并且在scrollView 不可滚动时,也会设置内边距.

    2、scrollableAxes自动计算内边距.

    3、never不计算内边距

    4、always根据safeAreaInsets计算内边距

    相关文章

      网友评论

          本文标题:界面布局

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