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")
}
}
答案 0 :(得分:1)
在按钮成为视图层次结构的一部分(即它具有父视图)之前,您不能添加涉及按钮顶部锚点的约束。该按钮知道何时将其添加到超级视图,因为它收到了didMoveToSuperview
。这是最早您可以放入约束代码的时刻。