何时为Swift中的视图/图层设置边界和框架?

dan*_*ing 5 calayer uiview ios swift

我在UIView子类中有类似的东西:

override var bounds : CGRect {
  didSet {
    somelayer.frame = bounds
  }
}
Run Code Online (Sandbox Code Playgroud)

在相应的somelayer,我有这个:

override var bounds: CGRect {
  didSet {
    someFunction()
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果使用初始化视图super.init(frame: someFrame),则不会调用第一个块.这似乎表明该bounds物业并未设置frame.

如果我改变了第一块override var frame,那么它将被称为super.init(frame: someFrame),这将设置framesomelayer.有趣的是,当发生这种情况时,会调用第二个块,这表明bounds并且frame同时设置(这也是我所期望的).

我在这里错过了什么吗?

dre*_*wag 6

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

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

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

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