为什么在声明自定义视图时我们不必使用“frame”?

时间:2017-10-04 12:54:35

标签: ios swift uiview

创建此视图时,我不明白为什么:

class MenuBar: UIView {
    override init (frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = UIColor.blue
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

...当我在另一个类中使用它时,我可以放一些这样的代码:

let menuBar: MenuBar = {
    let mb = MenuBar()
    return mb
}()

为什么我不必提及有关frame的任何内容?

2 个答案:

答案 0 :(得分:3)

您正在调用从UIView实现继承的便捷初始值设定项。这个无参数的便利初始化程序调用带有框架的那个并向其传递一个默认值 - 最后,从继承的超类初始化程序调用带有frame的初始化程序。

答案 1 :(得分:3)

UIView默认初始值设定项,其无参数。无论是否对UIView进行子类化,该初始化程序都可用。它初始化UIView实例,其框架为CGRect.zero