我的应用程序中有一堆按钮,我想对所有按钮使用相同的类(UIButton(。我需要能够在类中同时更改所有约束,其中一些约束将嵌套在不同的父视图中。所有这些都是在Interface Builder中创建的,嵌套在它们自己的UIView中的几个水平和垂直UI堆栈视图。
这可能吗?
我本想做这样的事情,但我不知道如何走得更远:
class myButtonClass: UIButton {
required init(coder aDecoder:NSCoder) { super.init(coder: aDecoder)!}
override init(frame:CGRect) {super.init(frame: frame)
setConstraints()
}
func setConstraints() {
let topMarginConstraint = NSLayoutConstraint(item: .self, attribute: NSLayoutConstraint.Attribute.topMargin, relatedBy: NSLayoutConstraint.Relation, toItem: .superview, attribute: NSLayoutConstraint.Attribute.topMargin, multiplier: 1, constant: 2)
//Additional Constraints
self.addConstraints([topMarginConstraint])
}
}
由于各种原因,这不起作用,其中一些错误是因为我不知道如何将以上内容分配给未公开的超级视图(父视图(?
我自己用.superview:解决了这个问题
func setConstraints() {
self.translatesAutoresizingMaskIntoConstraints = false
self.widthAnchor.constraint(equalTo: superview!.widthAnchor, multiplier: 0.8).isActive = true
self.heightAnchor.constraint(equalTo: superview!.heightAnchor, multiplier: 0.8).isActive = true
self.centerYAnchor.constraint(equalTo: superview!.centerYAnchor).isActive = true
self.centerXAnchor.constraint(equalTo: superview!.centerXAnchor).isActive = true
}