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

时间:2014-06-12 04:41:22

标签: ios uiview calayer 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)将调用它,并设置frame的{​​{1}}。有趣的是,当发生这种情况时,会调用第二个块,表明somelayerbounds同时设置(这也是我所期望的)。

我在这里遗漏了什么?

1 个答案:

答案 0 :(得分:6)

在初始化期间不会调用

Property Observers

  

当属性第一个时,不会调用willSet和didSet观察者   初始化。它们仅在设置属性值时调用   在初始化上下文之外。

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

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