代码之家  ›  专栏  ›  技术社区  ›  funct7

ios NSLayoutConstraint激活不会立即在UICollectionViewCell中应用

  •  0
  • funct7  · 技术社区  · 5 年前

    我有两个 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() 什么都没做。它确实会应用更改,但实际显示时会恢复更改。

    0 回复  |  直到 5 年前