在 iOS 开发中,应用的界面可以由一棵树状的 UIView 组成。这颗树的根是 UIWindow,接下来是 UIWindow 的 rootViewController 的 根 UIView, 在这个 UIView 上 可以有各种各样的子 UIView。
UIView 提供了叫做 layoutSubviews 的方法来实现父 UIView 对子 UIView 的布局管理。
在程序开发中并不会直接调用layoutSubViews的方法,而是在一些时机自动触发:
- init & initWithFrame 方法都不会触发 layoutSubviews
- addSubview 方法会自动触发 layoutSubViews
- 对UIView 的 frame 进行设置(这个frame发生了变化),会触发 layoutSubViews
- 滚动 UIScrollView 会触发它的 layoutSubViews
- 改变 UIView 的 frame 也会触发它的父 UIView 的 layoutSubViews
- 旋转 Screen 可以触发父 UIView 上的 layoutSubViews ??
- 调用 setNeedsLayout 非立即触发 layoutSubViews
- 调用 layoutIfNeeded 立即触发 layoutSubViews