如何检查视图中是不是已经存在约束?
Posted
技术标签:
【中文标题】如何检查视图中是不是已经存在约束?【英文标题】:How to check if a constraint already exists inside a view?如何检查视图中是否已经存在约束? 【发布时间】:2015-04-09 08:49:25 【问题描述】:我正在为我的 tableView 和其中的每个单元格使用自动布局,我以编程方式创建了一些约束。
为了避免每次都删除所有的约束,想知道有没有办法循环view.constraints()
,如果有H:|-view-|
这样的约束,我就删除了。
有可能吗?
【问题讨论】:
您能详细说明一下吗?你想达到什么目的?我确信有一些更好的解决方案可以解决您的问题,而无需检查约束是否存在。 自动调整大小蒙版实际上添加了一些约束,但我确实找到了另一种方法。 @Nico 您可以为每个约束赋予标识符,这样您就可以在需要时获得特定的约束。 developer.apple.com/documentation/uikit/nslayoutconstraint/… 【参考方案1】:您需要使用变量(或数组)来保存与您想要的匹配的那些约束,然后循环 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;
))
【讨论】:
【参考方案3】:无需循环约束。这应该有效:
toRemove = NSLayoutConstraint.constraints(withVisualFormat: "H:|-view-|",
options: [],
metrics: nil,
views: ["view": yourView])
viewWithConstraints.removeConstraints(toRemove)
【讨论】:
以上是关于如何检查视图中是不是已经存在约束?的主要内容,如果未能解决你的问题,请参考以下文章