何时为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)调用,它将设置somelayerframe 。 有趣的是,当发生这种情况时,会调用第二个块,这表明boundsframe是同时设置的(这也是我所期望的)。

我在这里遗漏了什么?

初始化期间不会调用属性观察器。

首次初始化属性时,不会调用willSet和didSet观察者。 仅在属性的值设置在初始化上下文之外时才调用它们。

也许是内部构造视图的方式,帧在初始化后设置,但边界不是。

然后,在设置图层的框架时,边界也会通过内部方法更新。