一:纵向布局的两种方式(避免计算高度)

  1.确定父布局高度。子视图可以采用相对于底的布局

  2.不确定父布局高度。子视图就只能采用从上至下的布局方式,不能采用底布局

 

二:约束为什么可以自动计算高度?

  约束从内到外,布局从外到里。

  所以动态高度都是由子元素决定的,那么约束从内到外正好可以解决动态高度问题。

Leading and Top是依据父布局的,Bottom and Trailing父布局依据子布局算出。这就是Xib默认的布局方式,默认布局让我们认为是子元素和父元素一样大,其实它的深层含义是,左上边距,子元素和父元素一样大,右下父元素和子元素一样.

而屏幕的约束则是固定的。

当然我们手动写约束还是应该正常写。

1.ScrollView和父布局一样大。(显示区域大小)

 

2.ScrollView的子容器(UIView|| UIStackView)和ScrollView布局一样大。
这时候会有约束冲突,此时在子容器放一个元素即可。(可以在这里设置ScrollView和子容器的底部差距)

ScrollView默认会有水平和垂直滚动,设定UIView水平居中表示垂直滚动,设置垂直居中表示水平滚动。

3.ScrollView的子容器依据从上到下布局方式即可。

4.子容器是UIView必须添加这个步骤,UIStackView不用。(内容区域大小!)

加一个约束,子容器和子容器最下面的子元素Bottom相同,即可自动算高。

如果可滚动区域内容较多且有交互性,建立单独抽出一个View较好,然后用约束框架手动添加和ScrollView之间的约束
关于UIStackView 和UIView的选择:
UIStackView适合有hidden删除的,然后子元素有比较明显可分块的条理性。(垂直UIStackView和label是有冲突的,因为UIStackView会依据最大子元素宽度决定宽度,所以只能强制设子元素宽度约束和最外面的屏幕View一样大)
如果元素比较零散杂乱,建议用UIView。
一般是两者结合使用

 

三 :不同分辨率适配:

分辨率即宽高不同,核心是适配宽高。依据固定距离,可分为下面三种方法
  1.父子边距法
  2.兄弟间距法
  3.父子中间法