Auto layout

流程:

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.当监听到约束有新的变化时,进入下一个循环布局。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容