美文网首页
Auto layout

Auto layout

作者: monkey姜啦 | 来源:发表于2020-10-12 13:40 被阅读0次

    流程:

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

    相关文章

      网友评论

          本文标题:Auto layout

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