swift使用類方法加載xib視圖和awakeFromNib方法調(diào)用順序

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()
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容