属性观察员为边界而不是框架

时间:2016-03-21 19:40:58

标签: ios swift property-observer

我正在研究这个项目,故事板上有一个场景。

场景是一个TableViewController。

  • 表视图有一个自定义原型单元格(链接到CustomCell.swift)。

    • 在原型单元格内部有一个标签和一个自定义UIView(链接到CustomView.swift)。这些元素具有相对于原型单元格的contentView的布局约束。

现在,我希望在我的自定义视图上绘制的内容在视图大小更改时更改,以便在设备旋转时将其调整为新的单元格宽度。由于受到限制,CustomCell的框架将在设备旋转后更改大小时更改。为了检测这个,我向CustomView.swift添加了两个属性观察器:

override var frame: CGRect {
    didSet {
        print("Frame was set!")
        updateDrawing()
    }
}

override var bounds: CGRect {
    didSet {
        print("Bounds were set!")
        updateDrawing()
    }
}

运行项目时,第二个观察者在旋转设备时工作正常。第一个观察者没有。我的问题是为什么第一个观察者没有检测到帧已经改变了?

1 个答案:

答案 0 :(得分:2)

.frame是根据视图(和变换)的.bounds和.center计算的,所以它不会改变。为了对旋转做出反应,重写(从iOS8开始):

Java