Swift删除宽高比约束

时间:2018-04-23 07:44:33

标签: ios swift constraints aspect-ratio

有没有办法删除宽高比约束?

例如

let aspectRatio = messageImage.constraint(withIdentifier: "aspectRatio")
aspectRatio?.isActive = false

我需要保留对象的所有约束,但只删除宽高比

enter image description here

这种性质的东西......

3 个答案:

答案 0 :(得分:2)

您可以创建约束的IBOutlet,然后在代码中将isActive设置为false。

答案 1 :(得分:2)

假设您有imageView的引用并且已将约束赋予标识符 在您的情况下,您已使用标识符命名约束:aspectRatio

因此,对于上述情况,您可以这样做:

//Get constraints filtered against a user-defined identifier
let filteredConstraints = imageView.constraints.filter { 
    $0.identifier == "aspectRatio"
}

//Get the first constraint (...as per your case)
let aspectRatio = filteredConstraints.first

//Deactivate it
aspectRatio?.isActive = false

扩展解决方案

为了进一步改进,您可以将UIView扩展为:

extension UIView {

    func constraint(withIdentifier identifier: String) -> NSLayoutConstraint? {
        let filteredConstraints = self.constraints.filter {
            $0.identifier == identifier            
        }

        return filteredConstraints.first
    }

}

现在你终于可以做你最初想要的了,即:

let aspectRatio = imageView.constraint(withIdentifier: "aspectRatio")
aspectRatio?.isActive = false

答案 2 :(得分:0)

您可以使用func removeConstraint(_ constraint: NSLayoutConstraint)方法删除已添加的约束。

还提到,此方法将在以后的版本中弃用,应该避免使用。而是将NSLayoutConstraint的活动属性设置为NO。