2016-03-21 89 views
0

我正在這個項目上工作,我有一個場景的故事板。物業觀察員工作的界限,但不是框架

場景是一個TableViewController。

  • 表視圖具有自定義原型單元格(鏈接到CustomCell.swift)。

    • 在原型單元格內有一個標籤和一個自定義UIView(鏈接到CustomView.swift)。這些元素相對於原​​型單元格的contentView具有佈局約束。

現在,我要被抽在我的自定義視圖中的東西來改變時的角度的大小而變化,因此,當設備旋轉時,將其調整到新的單元格的寬度。由於約束條件,當CustomCell在旋轉設備後更改大小時,CustomView的框架將會更改。爲了檢測這一點,我添加了兩個屬性觀察員CustomView.swift:

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

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

當運行該項目,第二觀察者工作正常,當我旋轉設備。第一個觀察者沒有。我的問題是爲什麼第一個觀察者沒有發現框架已經改變?

回答

2

.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) 
}