Ios 如何覆盖在父类中设置的约束

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

我创建了一个父类,它只是一个UIStackView,还有几个其他通用属性,将在整个应用程序中使用

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。