美文网首页移动端开发
Autolayout的生命周期

Autolayout的生命周期

作者: 我才是臭吉吉 | 来源:发表于2019-03-19 16:31 被阅读0次
Autolayout生命周期.jpg

上图即为Autolayout的生命周期过程(截取自219_mysteries_of_auto_layout_part_2)。

生命周期

  1. APP启动后,随着RunLoop的运行,系统在其内部监听着约束变化(Constraints Change):如激活或失效约束、修改优先级、修改常量值等任意造成约束方程式修改的操作,甚至是直接添加或删除视图等操作,都可以导致约束发生变化。
  2. 在接收到布局变化后,Layout Engine会根据变化的约束重新计算布局,并将需要更新布局的视图进行标记(对其父视图调用setNeedsLayout方法),之后便进入延迟布局阶段(Deffered Layout Pass)。

    注意:

    在进入延迟布局阶段之前,Layout Engine已经将更新的约束计算完毕并将视图的新frame求出。但并不在此时更新视图。

  3. 延迟布局阶段:此阶段的主要作用是将错误位置的视图重新定位(Reposition misplaced views)。其在视图层级中执行,分为两步:
    • 更新约束:从下往上(子视图到父视图),依次遍历视图层级,调用View的updateConstraints方法(或ViewController的updateViewConstraints方法)来更新约束(你可以在此覆盖本方法来设置自定义约束,且在此设置时,执行效率最高。记得最后调用父类实现)。
    • 给视图及子视图重新设定位置(给view的frame赋值):从上到下依次调用View的layoutSubViews方法(或ViewController的viewLayoutSubViews方法),从Layout Engine中取出预算好的frame进行赋值(你可以覆盖此方法实现自定义布局,不过此刻不是稳态,需要在适合时候调用父类实现)。

延迟布局阶段的触发条件

调用方法 结果
setNeedsUpdateConstraints 下一次loop执行updateConstraints
updateConstraintsIfNeeded 立即执行updateConstraints
setNeedsLayout 下一次loop执行layoutSubViews
layoutIfNeeded 立即执行layoutSubViews
setNeedDisplay 下一次loop执行draw

相关文章

  • Autolayout的生命周期

    上图即为Autolayout的生命周期过程(截取自219_mysteries_of_auto_layout_par...

  • Auto Layout

    Auto Layout的生命周期 Auto Layout 性能问题 AutoLayout的一些基本概念 利用约束来...

  • 基础

    一、Autolayout的生命周期1.app启动后,Runloop监听约束的变化,增删查改等~2.在接受到布局变化...

  • 基础

    一、Autolayout的生命周期1.app启动后,Runloop监听约束的变化,增删查改等~2.在接受到布局变化...

  • 基础

    一、Autolayout的生命周期1.app启动后,Runloop监听约束的变化,增删查改等~2.在接受到布局变化...

  • iOS - AutoLayout -2 AutoLayout

    # iOS - AutoLayout -2 AutoLayout 上篇文章我们了解了AutoLayout 的布局方...

  • 9.4 AutoLayout使用

    AutoLayout使用 AutoLayout使用.png

  • # iOS - AutoLayout -1

    iOS - AutoLayout -1 1、AutoLayout 自动布局(AutoLayout)是iOS6引入的...

  • AutoLayout

    AutoLayout autolayout的概念 Autolayout是一种“自动布局”技术,专门用来布局UI界面...

  • ScrollView 与 Autolayout

    ScrollView 与 Autolayout ScrollView 与 Autolayout

网友评论

    本文标题:Autolayout的生命周期

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