我在UIView
子类中有这样的东西:
override var bounds : CGRect {
didSet {
somelayer.frame = bounds
}
}
在相应的somelayer
中,我有:
override var bounds: CGRect {
didSet {
someFunction()
}
}
现在,如果使用super.init(frame: someFrame)
初始化视图,则不会调用第一个块。这似乎表明bounds
属性未与frame
一起设置。
如果我将第一个块更改为override var frame
,则super.init(frame: someFrame)
将调用它,并设置frame
的{{1}}。有趣的是,当发生这种情况时,会调用第二个块,表明somelayer
和bounds
同时设置(这也是我所期望的)。
我在这里遗漏了什么?
答案 0 :(得分:6)
当属性第一个时,不会调用willSet和didSet观察者 初始化。它们仅在设置属性值时调用 在初始化上下文之外。
也许在内部构造视图的方式,帧是在初始化后设置的,但边界不是。
然后,在设置图层的框架时,边界也会通过内部方法更新。