Swift 删除宽高比限制

Swift remove aspect ratio constraint

有没有办法删除纵横比限制?

例如

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

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

这种性质的东西...

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

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

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

假设您有 imageView 的引用并为约束指定了标识符。
在您的情况下,您已使用标识符命名约束:aspectRatio.

所以对于上面的内容,你可以这样做:

//Get constraints filtered against a user-defined identifier
let filteredConstraints = imageView.constraints.filter { 
    [=10=].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 {
            [=11=].identifier == identifier            
        }

        return filteredConstraints.first
    }

}

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

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