swift使用類方法加載xib視圖和awakeFromNib方法調(diào)用順序:
如下代碼:
// MARK: - View LilfeCycle
class func initView() -> DSComposeTypeView {
// 從xib加載完成視圖,就會調(diào)用awakeFromNib方法,此時frame是600 * 600
let v = Bundle.main.loadNibNamed("DSComposeTypeView", owner: nil, options: nil)?.first as! DSComposeTypeView
// XIB加載默認(rèn)是 600*600
v.frame = kScreen.bounds
v.setupUI()
return v
}
override func awakeFromNib() {
// setupUI()
}
結(jié)果一番測試,我們可以總結(jié)如下:如果自定義view和xib的view關(guān)聯(lián)(蘋果本身不推薦這種做法),初始化的時候是使用類方法來進行初始化;而類方法初始化的時候需要加載xib文件,這里面就會出現(xiàn)調(diào)用順序的問題。從xib加載完視圖,系統(tǒng)就會立即調(diào)用awakeFromNib方法,而此時nib文件中view的frame實際上是600*600的,是不正確的,如果要更改其frame,需要注意調(diào)用順序。改進寫法如下:
// MARK: - View LilfeCycle
class func initView() -> DSComposeTypeView {
// 從xib加載完成視圖,就會調(diào)用awakeFromNib方法,此時frame是600 * 600
return Bundle.main.loadNibNamed("DSComposeTypeView", owner: nil, options: nil)?.first as! DSComposeTypeView
}
override func awakeFromNib() {
// XIB加載默認(rèn)是 600*600
frame = kScreen.bounds
setupUI()
}