流程:
Layout Engine 是Auto Layout 的核心,会将视图、约束、优先级、固定大小通过计算转换成最终的大小和位置,约束发生变化,每当约束发生变化,就会触发 Deffered Layout Pass,完成后进入监听约束变化的状态。当再次监听到约束变化,即进入下一轮循环中。
主要可拆分为三个步骤:
一.Layout Engine
1.添加、删除视图时会触发约束变化,设置 Constant 或 Priority 时也会触发约束变化;
2.Layout Engine 在碰到约束变化后会重新计算布局,获取到布局后调用 superview.setNeedLayout(),然后进入 Deferred Layout Pass。
二.Deferred Layout Pass
1.主要作用是做容错处理;
2.会从上到下调用 layoutSubviews(),通过 Cassowary 算法计算各个子视图的位置;
3.算出来后将子视图的 frame 从 Layout Engine 里拷贝出来;
三.Application Runloop
1.监听约束变化的状态;
2.当监听到约束有新的变化时,进入下一个循环布局。
网友评论