我有一个集合视图,每个单元格都有一个textView,这是我设置的textView约束
textView.topAnchor.constraint(equalTo: object1.bottomAnchor).isActive = true
textView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
...以及textView的宽度和高度。
现在,由于if条件,我想将textView的topAnchor更改为object 2 bottom anchor,而不是object 1 bottom anchor。但是,当我输入下面的代码时,我得到Will try to recover by breaking constraint错误。
有没有人知道一种方法来改变顶部锚一旦它已经成立?
if (aCondition){
textView.topAnchor.constraint(equalTo: object2.bottomAnchor).isActive = true
}else{
textView.topAnchor.constraint(equalTo: object1.botttomAnchor).isActive = true
}
1条答案
按热度按时间agyaoht71#
你必须去激活旧的活动约束。现在你只是在视图中添加新的约束。所以首先我建议你创建两个属性来保持对约束的引用:
然后在开始创建UI时,正确初始化它们:
并激活您希望作为第一个活动对象的对象:
然后,当要更改约束时,首先取消激活应取消激活的约束,然后激活正确的约束:
P.S.:你总是想先停用旧的,然后激活新的,否则当你激活新的那一刻,它会与旧的冲突,并在控制台中引起警告。
P.S.2:如果您想一次激活多个约束,请使用
NSLayoutConstraint.activate(_:)
-按照documentation,它更有效:通常,使用此方法比单独激活每个约束更有效。
因此,例如,代替:
而是使用:
这同样适用于取消激活约束和
NSLayoutConstraint.deactivate(_:)
。