何时为Swift中的视图/图层设置边界和框架?
我在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)
调用,它将设置somelayer
的frame
。 有趣的是,当发生这种情况时,会调用第二个块,这表明bounds
和frame
是同时设置的(这也是我所期望的)。
我在这里遗漏了什么?
初始化期间不会调用属性观察器。
首次初始化属性时,不会调用willSet和didSet观察者。 仅在属性的值设置在初始化上下文之外时才调用它们。
也许是内部构造视图的方式,帧在初始化后设置,但边界不是。
然后,在设置图层的框架时,边界也会通过内部方法更新。