Kev*_*VuD 6 ios nslayoutconstraint swift
我有一个集合视图,每个单元格都有一个textView.这是我的textview约束设置
textView.topAnchor.constraint(equalTo: object1.bottomAnchor).isActive = true
textView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
Run Code Online (Sandbox Code Playgroud)
...我的textView的宽度和高度.
现在,由于if条件,我想将textView的topAnchor更改为object 2 bottom anchor而不是object 1 bottom anchor.但是,当我输入下面的代码时,我会通过破坏约束错误来尝试恢复.
一旦它已经设置,有没有人知道改变顶部锚的方法?
if (aCondition){
textView.topAnchor.constraint(equalTo: object2.bottomAnchor).isActive = true
}else{
textView.topAnchor.constraint(equalTo: object1.botttomAnchor).isActive = true
}
Run Code Online (Sandbox Code Playgroud)
Mil*_*sáľ 17
您必须停用旧的活动约束.现在,您只是向视图添加新约束.所以首先我建议你创建两个属性来保持对约束的引用:
fileprivate var topConstraint1: NSLayoutConstraint?
fileprivate var topConstraint2: NSLayoutConstraint?
Run Code Online (Sandbox Code Playgroud)
然后在开始时,在创建UI时,正确初始化它们:
topConstraint1 = textView.topAnchor.constraint(equalTo: object1.bottomAnchor)
topConstraint2 = textView.topAnchor.constraint(equalTo: object2.bottomAnchor)
Run Code Online (Sandbox Code Playgroud)
并首先激活您想要激活的那个:
topConstraint1?.isActive = true
Run Code Online (Sandbox Code Playgroud)
然后,当您想要更改约束时,首先停用应该停用的约束,然后激活正确的约束:
if aCondition {
topConstraint1?.isActive = false
topConstraint2?.isActive = true
} else {
topConstraint2?.isActive = false
topConstraint1?.isActive = true
}
Run Code Online (Sandbox Code Playgroud)
PS:您总是希望先停用旧的,然后激活新的,否则当您激活新的时,它将与旧的冲突,并在控制台中引起警告.
| 归档时间: |
|
| 查看次数: |
7831 次 |
| 最近记录: |