03-Auto Layout是怎么进行自动布局的,性能如何?

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

Auto Layout有一整套布局引擎系统叫Layout Engine,用来统一管理布局的创建、更新和销毁。每个视图在得到自己的布局之前,Layout Engine会将视图、约束、优先级、固定大小通过计算转换成最终的大小和位置。当发生Constraints Change时,Layout Engine会重新计算布局,获取到布局后调用superview.setNeedLayout(),然后进入Deffered Layout Pass。Deffered Layout Pass主要作用是做容错处理,假如有些视图在更新约束时没有确定或缺失布局声明的话,会先在这里做容错处理。然后Layout Engine会从上到下调用layoutSubviews(),通过Cassowary算法计算子视图的位置,算出来后将子视图的frame从Layout Engine里拷贝出来,之后的流程就和手写布局一样完成绘制、渲染。

1.Constraints Change包括添加、删除、更新、Activating、Deactivating、改变约束优先级。
2.总体流程就是Constraints Change ->Layout Engine重新计算布局->触发superview.setNeedLayout()->Deffered Layout Pass容错处理->触发layoutSubviews()->绘制、渲染

Auto Layout性能问题
Auto Layout在iOS12中优化后的表现

iOS12之前,视图嵌套的数量对性能的影响是呈指数级增长的,而iOS12优化之后对性能的影响是线性增长,对性能消耗不大。

戴铭老师的DSL布局:https://github.com/ming1016/STMAssembleView,类似VFL按照UIStackView的思路用Auto Layout实现。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容