是否可以在UIButton的子类中设置约束?

时间:2018-11-09 00:09:42

标签: ios swift uiview uibutton constraints

class SpecialButton: UIButton {

    init() {
        super.init(frame: .zero)

    }

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

我想创建UIButton的自定义按钮子类。我要设置此按钮的约束。在视图控制器中,我可以使用view.addSubview()方法并在那里设置button.topAnchor.constraint,但是在此子类中不起作用。我该如何处理?还是我尝试以错误的方式进行处理?我是编码新手,请告诉我。

这是我在类中添加超级视图属性后的代码。我认为它可以解决我的问题。有什么更好的解决方案吗,请告诉我。

    class SpecialButton: UIButton {

    let superView: UIView

    init(superView: UIView) {
        self.superView = superView
        super.init(frame: .zero)

        superView.addSubview(self)
        self.translatesAutoresizingMaskIntoConstraints = false
        self.topAnchor.constraint(equalTo: superView.topAnchor).isActive = true
    }

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

1 个答案:

答案 0 :(得分:1)

在按钮成为视图层次结构的一部分(即它具有父视图)之前,您不能添加涉及按钮顶部锚点的约束。该按钮知道何时将其添加到超级视图,因为它收到了didMoveToSuperview。这是最早您可以放入约束代码的时刻。