AutoLayout布局原理

1997年, Auto Layout用到的布局算法Cassowary被发明了出来
2011年, 苹果公司将Cassowary算法运用到了自家的布局引擎Auto Layout中

AutoLayout布局转成视图的具体尺寸/位置过程

1.App启动后 开启RunLoop 循环检查图层树中是否存在约束变化
2.发生约束改变(直接/间接设置 更新 移除约束) RunLoop检测到变化
3.布局引擎重新计算布局 将计算出新的视图frame存在于布局引擎中
4.对比视图新的frame 如果视图的位置或尺寸发生了改变 调用视图的父视图setNeedsLayout打上需要布局的标记
5.从上到下(父视图->子视图)遍历视图层级 调用被标记为setNeedsLayout视图的layoutsubViews方法
6.这个阶段是从布局引擎中把计算好的尺寸/位置设置到视图上
重写layoutSubviews可以发现,视图本身frame在该方法调用前已经有值 子视图在该方法调用前是旧值,该方法调用完毕会赋上新值

Autolayout与Frame关系

1.Autolayou本质是一个线性方程解析Engine 通过描述视图之间布局关系 由引擎解析计算出位置/尺寸值
2.Frame是直接设置视图的位置/尺寸数值
3.一个视图使用一种布局方式 要么frame 要么AutoLayout
如果一个视图使用了Autolayoutb布局。 程序运行中 ,通过frame设置位置/尺寸 不生效

AutoLayout布局的不同方式

1.NSLayoutConstraint
2.VFL
3.Interface Builder
4.NSLayoutAnchor
5.Masonry
6.UIStackView

你可能感兴趣的:(AutoLayout布局原理)