视图实际布局会调用的方法
实际布局方法有以下3个
按照调用顺序分别为
1.updateConstraints 更新约束
2.layoutSubviews 处理视图定位和大小调整
3.drawRect: 刷新绘制
PS:
layoutsubviews自动触发的情景包括
a. 修改 view 的大小
b.新增 subview
c. 用户在 UIScrollView 上滚动(layoutSubviews 会在 UIScrollView 和它的父 view 上被调用)
d. 用户旋转设备
e.更新视图的 constraints
updateConstraints开启方法
更新约束:
setNeedsUpdateConstraints() 做标记,下一次runloop更新周期中更新约束
updateConstraintsIfNeeded() 检查标记,如果有标记则立即触发runloop更新
invalidateIntrinsicContentSize()设置标记,作用是视图根据它的内容得到的自然尺寸
layoutSubviews开启方法
setNeedsLayout 做标记, 立即刷新,等待runloop一轮循环结束刷新(即beforwait/exit状态).会异步调用layoutIfNeeded.
layoutIfNeeded 检查标记。 如果有刷新的标记,立即调用layoutSubviews,如无标记,则不会调用layoutSubviews
最佳调用方式
[self setNeedsLayout];
[self layoutIfNeeded];
3 drawRect重绘的开启方法
setNeedsDisplay() 设置标记,下一个runloop周期,调用drawRect:刷新 绘制
4. 总结
包括updateConstraintsIfNeeded 和layoutIfNeeded.都具备唤醒runloop的能力,但是唤醒之前都会检查是否有需要更新的标记