【发布时间】:2019-01-03 08:26:30
【问题描述】:
您好,我想了解一下 WWDC 2018 高性能自动布局中引入的 Auto Layout 的渲染循环
他们说当引擎(自动布局)计算约束方程然后引擎将值通知给视图
最后视图调用superview调用setNeedsLayout
所以我试着检查一下
这是我的看法
BlueView 是 SuperView,GreenView 是 Subview
然后我覆盖 setNeedsLayout、layoutSubviews、draw 和 updateConstraints 以检查方法调用的顺序
结果是这样的
除了 4 次 setNeedsLayout 通话和 Only Superview 通话 setNeedsLayout 外,我都能理解
这是我的问题
- 为什么只有 SuperView 调用
setNeedsLayout - 为什么在这种情况下
setNeedsLayout被调用了 4 次
这是我的代码
class SuperView: UIView {
override func updateConstraints() {
super.updateConstraints()
print("SuperView : updateConstraints")
}
override func setNeedsLayout() {
super.setNeedsLayout()
print("SuperView : setNeedsLayout")
}
override func layoutSubviews() {
super.layoutSubviews()
print("SuperView : layoutSubviews")
}
override func draw(_ rect: CGRect) {
super.draw(rect)
print("SuperView : draw")
}
}
class SubView: UIView {
override func updateConstraints() {
super.updateConstraints()
print("SubView : updateConstraints")
}
override func setNeedsLayout() {
super.setNeedsLayout()
print("SubView : setNeedsLayout")
}
override func layoutSubviews() {
super.layoutSubviews()
print("SubView : layoutSubviews")
}
override func draw(_ rect: CGRect) {
super.draw(rect)
print("SubView : draw")
}
}
【问题讨论】:
标签: ios uiview autolayout