iOS 自动布局总结篇

前几篇已经讲述了代码 SB/xib 设置自动布局,并且介绍了几个特殊的例子。现在总结下。

自动布局的生命周期:

借用一张图介绍

官网视频中的PPT介绍

一一说明:Constraints  Change  Deferred Layout Pass

Constraints  Change 

约束的改变主要有下面几点引起:

1:激活或者相反的状态

2:改变约束的值

3:改变约束的优先级

4:改变View视图层的结构比如移除掉一个View或者改变层次

5:其他的比如改变一个控件的属性


Deferred Layout Pass


一张图说明下Deferred Layout Pass

主要下面两个过程


1:系统遍历View的层级结构并且调用所有控制器的updateViewConstraint方法或者所有的View的updateConstraint方法。然后你可以重写这个方法来自定义自己的约束。


注意注释部分


2:系统遍历View的层级结构调用所有控制器的ViewWillLayoutSubviews或者所有View的layoutSubViews。默认的layoutSubViews方法更新每个View的frame通过自动布局。你可以通过重写一些方法更改布局,这就是自定义布局的实现方式,注意为什么开始结束都要调用父类方法。


注意注释部分

注意:不要直接调用,通过其他方法触发,调用setNeedsLayout 方法或者 setNeedsUpdateConstraints方法。


举个例子

注意注释部分

其实通过setNeedsUpdateConstraints 触发,是批处理的一个表现,因为性能原因我们需要批量更新。他会标记约束,并且布局引擎将要重新在下一个循环中计算约束并调用updateConstraints方法去改变约束,注意一点最后要调用父类方法的实现,[super  updateConstraints ]。

setNeedsLayout 有时候你改变了一些布局,系统不能自己标记这个布局,你又不能自己直接访问这个布局的flag,这是你就要调用这个方法标记下这个布局,然后会在在下一个布局循环中重新计算稍后会调用layoutSubViews方法。注意你必须调用父类方法[super layoutSubViews]如果你要对frame有要求的话。

有时候需要马上更新约束布局

比如你做动画的时候需要立即更新约束布局

注意注释部分


有时候等不及下个循环马上在这个循环更新约束布局



最后总结一张图:


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

相关阅读更多精彩内容

  • 翻译自“Auto Layout Guide”。 4 高级自动布局 4.1 通过代码创建约束 尽可能使用界面生成器设...
    lakerszhy阅读 1,981评论 1 6
  • 翻译自:Demystifying iOS Layout 在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和...
    Mr大喵喵阅读 435评论 0 3
  • 在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题。通常这种问题发生的原因就是对于 view...
    MccReeee阅读 790评论 0 2
  • 1. 相关API 基于触发约束的布局 Triggering Constraint-Based Layout -- ...
    roc_lei阅读 3,610评论 2 11
  • 清晨站在窗台,透过玻璃往下看那被夜里蒙蒙雨洒湿的地面时,想起杜甫那首《春夜喜雨》,发现竟还能默念出全诗,这是幸福。...
    花古汇阅读 214评论 0 0

友情链接更多精彩内容