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

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

作者: 转岗做JAVA | 来源:发表于2019-03-27 22:20 被阅读0次
    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实现。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/uvoivqtx.html