我正在做这个项目,我在故事板上有一个场景。
场景是一个 TableViewController。
-
表视图具有自定义原型单元格(链接到自定义单元格.swift)。
- 在原型单元格中有一个标签和一个自定义UIView(链接到CustomView.swift)。这些元素具有相对于原型单元格的内容视图的布局约束。
现在,我希望在自定义视图上绘制的内容在视图大小更改时更改,以便在设备旋转时将其调整为新的单元格宽度。由于这些约束,在旋转设备后,当自定义单元格更改大小时,自定义视图的框架将更改。为了检测这一点,我在 CustomView 中添加了两个属性观察器.swift:
override var frame: CGRect {
didSet {
print("Frame was set!")
updateDrawing()
}
}
override var bounds: CGRect {
didSet {
print("Bounds were set!")
updateDrawing()
}
}
运行项目时,当我旋转设备时,第二个观察器工作正常。第一个观察者没有。我的问题是为什么第一个观察者没有检测到框架发生了变化?
.frame 是根据视图(和转换)的 .bounds 和 .center 计算的,因此它不会改变。为了对旋转做出反应,请覆盖以下内容(从 iOS8 开始):
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
coordinator.animateAlongsideTransition({ (coordinator) -> Void in
// do your stuff here
// here the frame has the new size
}, completion: nil)
}