Ios 如何在Swift中以编程方式更改布局约束?
我有一个集合视图,每个单元格都有一个文本视图。这是我的文本视图约束设置Ios 如何在Swift中以编程方式更改布局约束?,ios,swift,nslayoutconstraint,Ios,Swift,Nslayoutconstraint,我有一个集合视图,每个单元格都有一个文本视图。这是我的文本视图约束设置 textView.topAnchor.constraint(equalTo: object1.bottomAnchor).isActive = true textView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true …以及我的文本视图的宽度和高度 现在,由于if条件,我想将textView的topAnchor更改为object 2底部anc
textView.topAnchor.constraint(equalTo: object1.bottomAnchor).isActive = true
textView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
…以及我的文本视图的宽度和高度
现在,由于if条件,我想将textView的topAnchor更改为object 2底部anchor,而不是object 1底部anchor。然而,当我输入下面的代码时,我得到
将尝试通过中断约束错误进行恢复
是否有人知道一种方法,一旦设置好,就可以更改顶部锚
if (aCondition){
textView.topAnchor.constraint(equalTo: object2.bottomAnchor).isActive = true
}else{
textView.topAnchor.constraint(equalTo: object1.botttomAnchor).isActive = true
}
必须停用旧的活动约束。现在,您只是在视图中添加新约束。因此,首先我建议您创建两个属性,以保留对约束的引用:
fileprivate var topConstraint1: NSLayoutConstraint?
fileprivate var topConstraint2: NSLayoutConstraint?
然后,在开始创建UI时,正确初始化它们:
topConstraint1 = textView.topAnchor.constraint(equalTo: object1.bottomAnchor)
topConstraint2 = textView.topAnchor.constraint(equalTo: object2.bottomAnchor)
并首先激活要激活的一个:
topConstraint1?.isActive = true
然后,如果要更改约束,请先停用应停用的约束,然后激活正确的约束:
if aCondition {
topConstraint1?.isActive = false
topConstraint2?.isActive = true
} else {
topConstraint2?.isActive = false
topConstraint1?.isActive = true
}
注意:您总是希望先停用旧版本,然后再激活新版本,否则在激活新版本时,会与旧版本冲突,并在控制台中发出警告
p.S.2:如果要同时激活多个约束,请使用NSLayoutConstraint.activate(:)
-根据,它更有效:
通常,使用此方法比单独激活每个约束更有效
因此,例如,代替:
someConstraint1.isActive = true
someConstraint2.isActive = true
而是使用:
NSLayoutConstraint.activate([someConstraint1, someConstraint2])
这同样适用于停用约束和。hi,如果我以编程方式添加视图并设置约束,如何执行此操作