layout
// Allows you to perform layout before the drawing cycle happens. -layoutIfNeeded forces layout early
- (void)setNeedsLayout;
- (void)layoutIfNeeded;
- (void)layoutSubviews; // override point. called by layoutIfNeeded automatically. As of iOS 6.0, when constraints-based layout is used the base implementation applies the constraints-based layout, otherwise it does nothing.
解释:
- layoutSubviews:ios5.1及以前什么都不做,之后版本应用UIView所有constraint,无需开发者直接调用,只有autoresizing和constraint-based不能满足layout要求才override,首次调用在viewWillAppear和viewDidAppear之间,layout view hierarchy
- setNeedsLayout:invalidate当前layout,layout update during the next update circle,如果没有必要layout,不会layout,但receiver必然layout
- layoutIfNeeded:layout immediately,如果没有必要layout,不会layout,包括receiver