文章目录
  1. 1. 自动布局相关的一些知识点,对今天看到的文章的小总结
    1. 1.0.1. layoutSubviews()
    2. 1.0.2. setNeedsLayout() 跟 layoutIfNeeded()
    3. 1.0.3. 关于创建Autolayout的地方

自动布局相关的一些知识点,对今天看到的文章的小总结

layoutSubviews()

layoutSubviews()会在以下情况下调用

  • init初始化不会触发layoutSubviews。
  • addSubview会触发layoutSubviews。
  • 设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化。
  • 滚动一个UIScrollView会触发layoutSubviews。
  • 旋转Screen会触发父UIView上的layoutSubviews事件。
  • 改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
  • 直接调用setLayoutSubviews。

setNeedsLayout() 跟 layoutIfNeeded()

setNeedsLayout()方法: 标记为需要重新布局,异步调用layoutIfNeeded()刷新布局,不立即刷新,但layoutSubviews()一定会被调用 layoutIfNeeded()方法:如果,有需要刷新的标记,立即调用layoutSubviews()进行布局(如果没有标记,不会调用layoutSubviews())

如果要立即刷新,要先调用view.setNeedsLayout(),把标记设为需要布局,然后马上调用view.layoutIfNeeded(),实现布局

在视图第一次显示之前,标记总是“需要刷新”的,可以直接调用view.layoutIfNeeded()

关于创建Autolayout的地方

  • View中
    直接在init方法里创建.
  • ViewController中
    直接在viewDidLoad()里创建.

如果用IB创建约束,在viewDidLoad里不能获取到某个view的正确frame,怎么办?
这个时候你需要在一个叫viewDidLayoutSubviews()里的方法里获取一个view的正确frame.

文章目录
  1. 1. 自动布局相关的一些知识点,对今天看到的文章的小总结
    1. 1.0.1. layoutSubviews()
    2. 1.0.2. setNeedsLayout() 跟 layoutIfNeeded()
    3. 1.0.3. 关于创建Autolayout的地方