Swift 更新 addConstraint

Swift update addConstraint

我在更新约束时遇到问题。

我使用这段代码添加约束。

var oldHeight = 92 + ((catAmount-10)*100)

self.mainViewport.addConstraint(NSLayoutConstraint(item: self.mainViewport, attribute: .Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0, constant: CGFloat(oldHeight)))

此代码 100% 有效,但是当用户向下滚动时,我需要向 ViewController 添加更多信息,因此我需要将约束更新为。但我得到蚂蚁错误。

无法同时满足约束条件。 可能至少以下列表中的约束之一是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的; (2) 找到添加了不需要的约束或约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档) ( "", “” )

我尝试通过以下代码删除约束:

self.mainViewport.removeConstraint(NSLayoutConstraint(item: self.mainViewport, attribute: .Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0, constant: CGFloat(oldHeight)))

但它不会删除旧的,所以我无法添加新的或更新约束。

我做错了什么?如何在需要时不断更新约束?

P.S。我正在使用 ScrollViewController 和一个包含信息的 ViewController。

代码更新。

class CategoryViewController: UIViewController, UIScrollViewDelegate {
var CategoriesConstraint : NSLayoutConstraint!
/**  **/
var aukstis = 92 + (catAmount*100)


        self.mainViewport.setTranslatesAutoresizingMaskIntoConstraints(false)

        self.CategoriesConstraint = NSLayoutConstraint(item: self.mainViewport, attribute: .Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0, constant: CGFloat(aukstis))

        if(catAmount == 10){
            self.mainViewport.addConstraint(self.CategoriesConstraint)
            self.showApp(1,secondJson: 0)
        } else {
            self.CategoriesConstraint.constant = CGFloat(aukstis)
            self.mainViewport.updateConstraints()
            self.mainViewport.setNeedsLayout()
            self.mainViewport.layoutIfNeeded()
        }

您需要保留对原始约束的引用(在您创建它时返回),以便您可以更新它(最好,或者在需要时删除它)。

请注意,删除在您当前的代码中不起作用,因为您正在创建一个新约束并尝试将其删除,但它实际上尚未附加到视图。

self.xxxConstraint = NSLayoutConstraint(item: self.mainViewport, attribute: .Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 0, constant: CGFloat(oldHeight))

self.mainViewport.addConstraint(self.xxxConstraint)