如何检查一个视图内是否已存在约束?

5
我正在为我的tableView使用自动布局,对于其中的每个单元格,我都会通过编程方式创建一些约束。
为了避免每次删除所有约束,我想知道是否有一种方法可以循环查找view.constraints(),如果存在像H:|-view-|的约束,则将其删除。
这是否可能?

你能详细说明一下吗?你想要实现什么目标?我相信在不需要检查约束是否存在的情况下,有更好的解决方案来解决你的问题。 - oren
有一些限制实际上是由自动调整大小掩码添加的,但我确实找到了另一种方法。 - Nico
@Nico,你可以为每个约束指定标识符,这样当你需要时就可以获取特定的约束。https://developer.apple.com/documentation/uikit/nslayoutconstraint/1526879-identifier - Chirag Shah
3个回答

5

您需要使用变量(或数组)来保存符合您要求的约束条件,然后循环查找view.constraints()以删除它们。当您使用可视化格式时,无论您创建什么都将转换为多个约束。

另一种方法是通过检查约束属性(如firstItem和secondItem、relation等)来匹配您想要的内容。


2

以下是我如何检查一个控件是否已经有宽度或高度约束(Swift 5.1):

debugPrint(btn.constraints.contains(where: { (item) -> Bool in
    return item.firstAttribute.rawValue == NSLayoutConstraint.Attribute.width.rawValue;
    }))
debugPrint(btn.constraints.contains(where: { (item) -> Bool in
    return item.firstAttribute.rawValue == NSLayoutConstraint.Attribute.height.rawValue;
    }))

0

不需要循环约束条件。这应该可以工作:

toRemove = NSLayoutConstraint.constraints(withVisualFormat: "H:|-view-|",
                                                       options: [],
                                                       metrics: nil,
                                                         views: ["view": yourView])
viewWithConstraints.removeConstraints(toRemove)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接