UIView 的 layoutSubviews

在 iOS 开发中,应用的界面可以由一棵树状的 UIView 组成。这颗树的根是 UIWindow,接下来是 UIWindow 的 rootViewController 的 根 UIView, 在这个 UIView 上 可以有各种各样的子 UIView。

UIView 提供了叫做 layoutSubviews 的方法来实现父 UIView 对子 UIView 的布局管理。

在程序开发中并不会直接调用layoutSubViews的方法,而是在一些时机自动触发:

  1. init & initWithFrame 方法都不会触发 layoutSubviews
  2. addSubview 方法会自动触发 layoutSubViews
  3. 对UIView 的 frame 进行设置(这个frame发生了变化),会触发 layoutSubViews
  4. 滚动 UIScrollView 会触发它的 layoutSubViews
  5. 改变 UIView 的 frame 也会触发它的父 UIView 的 layoutSubViews
  6. 旋转 Screen 可以触发父 UIView 上的 layoutSubViews ??
  7. 调用 setNeedsLayout 非立即触发 layoutSubViews
  8. 调用 layoutIfNeeded 立即触发 layoutSubViews