我有两个
IBOutlet
集合,其中一个列表包含设置了填充值的约束,另一个列表中所有值都设置为0。在界面生成器中,第一组约束已安装,第二组约束未安装。
根据从服务器检索到的内容,约束要么保持原样,要么停用第一组约束,激活第二组约束。
现在,这通常可以正常工作,但我发现有时激活不会立即应用,尤其是在
UICollectionViewCell
例子
第一次加载单元格时,不会应用更改,但当我滚动到其他单元格并返回时,会应用更改。
有关于这种不一致行为的文件吗?
以下是代码激活/停用约束:
textConstSet.forEach { $0.isActive = false }
imageConstSet.forEach { $0.isActive = true }
运行此代码后的控制台输出:
(lldb) po cell.imageConstSet
â¿ Optional<Array<NSLayoutConstraint>>
â¿ some : 4 elements
- 0 : <NSLayoutConstraint:0x60000223f890 V:|-(0)-[UIStackView:0x7f8ada588f30] (active, names: '|':UIView:0x7f8ada588d50 )>
- 1 : <NSLayoutConstraint:0x60000223f8e0 V:[UIStackView:0x7f8ada588f30]-(0)-| (active, names: '|':UIView:0x7f8ada588d50 )>
- 2 : <NSLayoutConstraint:0x60000223f930 H:[UIStackView:0x7f8ada588f30]-(0)-| (active, names: '|':UIView:0x7f8ada588d50 )>
- 3 : <NSLayoutConstraint:0x60000223f980 UIView:0x7f8ada588760.width == 0 (active)>
(lldb) po cell.textConstSet
â¿ Optional<Array<NSLayoutConstraint>>
â¿ some : 4 elements
- 0 : <NSLayoutConstraint:0x600002212990 V:[UIStackView:0x7f8ada588f30]-(8)-| (inactive, names: '|':UIView:0x7f8ada588d50 )>
- 1 : <NSLayoutConstraint:0x6000022129e0 V:|-(8)-[UIStackView:0x7f8ada588f30] (inactive, names: '|':UIView:0x7f8ada588d50 )>
- 2 : <NSLayoutConstraint:0x600002212a30 H:[UIStackView:0x7f8ada588f30]-(12)-| (inactive, names: '|':UIView:0x7f8ada588d50 )>
- 3 : <NSLayoutConstraint:0x6000022126c0 UIView:0x7f8ada588760.width == 12 (inactive)>
还有,打电话
layoutIfNeeded()
什么都没做。它确实会应用更改,但实际显示时会恢复更改。