我創建的UIView class AView: UIView
的子類,拖動一個UIView到故事情節UIViewController
界面生成器文件,更改類名AView
,然後我拖累AView另外2個UIView
小號分配標籤10,11何時/何處UIView的子視圖是從故事板初始化的?
我的問題是當兩個子視圖都是創建的和初始化?
class AView: UIView{
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
print(self.subviews)
}
override func layoutSubviews() {
super.layoutSubviews()
print(self.subviews)
}
override func awakeFromNib() {
super.awakeFromNib()
print(self.subviews)
}
}
只有layoutSubviews
打印子視圖。當然應該是。正如文檔所述,似乎在此方法之前創建了子視圖:
此方法的默認實現在iOS 5.1和更早版本上不做任何操作。否則,默認實現使用您設置的任何約束來確定任何子視圖的大小和位置。 子類可以根據需要重寫此方法以執行其子視圖的更精確佈局。只有在子視圖的自動調整大小和基於約束的行爲不提供所需行爲的情況下,才應該重寫此方法。您可以使用您的實現直接設置子視圖的框架矩形。
另一個問題,如果super.layoutSubviews()
是必要的?
看起來這是不正確的,即使我連接仍然打印無AView的子視圖。即使我沒有連接,必須有一個時間子視圖被初始化,連接只是一個參考,不是嗎? –