Ios 如何覆盖在父类中设置的约束
我创建了一个父类,它只是一个UIStackView,还有几个其他通用属性,将在整个应用程序中使用Ios 如何覆盖在父类中设置的约束,ios,swift,Ios,Swift,我创建了一个父类,它只是一个UIStackView,还有几个其他通用属性,将在整个应用程序中使用 class baseStackView:UIView { var stack: UIStackView init(_ coder: NSCoder? = nil) { stack = UIStackView() stack.axis = UILayoutConstraintAxis.vertical stack.distribution = UIStackViewDistr
class baseStackView:UIView {
var stack: UIStackView
init(_ coder: NSCoder? = nil) {
stack = UIStackView()
stack.axis = UILayoutConstraintAxis.vertical
stack.distribution = UIStackViewDistribution.fill
stack.spacing = 20
if let coder = coder {
super.init(coder: coder)!
} else {
super.init(frame: CGRect.zero)
}
addSubview(stackView)
}
}
override func didMoveToSuperview() {
super.didMoveToSuperview()
setupConstraints()
}
private func setupConstraints() {
translatesAutoresizingMaskIntoConstraints = false
stack.translatesAutoresizingMaskIntoConstraints = false
stack.topAnchor.constraint(equalTo: topAnchor, constant: 20).isActive = true
stack.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 32).isActive = true
stack.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -32).isActive = true
}
现在,我遇到了一种情况,我需要更改stackView的前导和尾随锚定,以使其符合我所需视图之一的外观
因此,很自然地,我只是在我的一个子类中再次设置尾随、前导约束
var baseView: BaseStackView
baseView = BaseStackView()
baseView.stack.translatesAutoresizingMaskIntoConstraints = false
baseView.stack.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
baseView.stack.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
这似乎在我的约束范围内引起冲突,因为从技术上讲,我设置了两次。是否有方法覆盖初始约束以避免这些警告?任何帮助都将不胜感激。不要造成新的限制。控件从要更改的约束拖动到类的源文件中,以创建约束的出口
然后,您可以更改约束的常量值以更改其数量。我不使用情节提要。有没有办法通过代码复制这一点?当然。设置实例变量时,请使用有意义的名称将其保留在约束中。(您发布的代码使用“设置并忘记”语法创建约束,但不保存约束。与其这样做,不如将诸如
baseView.stack.leadingAnchor.constraint(equalTo:leadingAnchor)
之类的行的结果分配给实例变量。然后在第二行代码中将isActive设置为true。