swift使用类方法加载xib视图和awakeFromNib方法调用顺序

swift使用类方法加载xib视图和awakeFromNib方法调用顺序:
如下代码:

// MARK: - View LilfeCycle
    class func initView() -> DSComposeTypeView {
        // 从xib加载完成视图,就会调用awakeFromNib方法,此时frame是600 * 600
        let v = Bundle.main.loadNibNamed("DSComposeTypeView", owner: nil, options: nil)?.first as! DSComposeTypeView
        // XIB加载默认是 600*600
        v.frame = kScreen.bounds
    
        v.setupUI()
    
        return v
    }

    override func awakeFromNib() {
//        setupUI()
    }

结果一番测试,我们可以总结如下:如果自定义view和xib的view关联(苹果本身不推荐这种做法),初始化的时候是使用类方法来进行初始化;而类方法初始化的时候需要加载xib文件,这里面就会出现调用顺序的问题。从xib加载完视图,系统就会立即调用awakeFromNib方法,而此时nib文件中view的frame实际上是600*600的,是不正确的,如果要更改其frame,需要注意调用顺序。改进写法如下:

// MARK: - View LilfeCycle
    class func initView() -> DSComposeTypeView {
        // 从xib加载完成视图,就会调用awakeFromNib方法,此时frame是600 * 600
        return Bundle.main.loadNibNamed("DSComposeTypeView", owner: nil, options: nil)?.first as! DSComposeTypeView
    }

    override func awakeFromNib() {
        // XIB加载默认是 600*600
        frame = kScreen.bounds
    
        setupUI()
    }

你可能感兴趣的:(swift使用类方法加载xib视图和awakeFromNib方法调用顺序)