【问题标题】:Changing NSLayoutConstraint constant in cellForRowAtIndexPath continually leads to "unable to satisfy constraints" error更改 cellForRowAtIndexPath 中的 NSLayoutConstraint 常量不断导致“无法满足约束”错误
【发布时间】:2015-10-10 14:55:06
【问题描述】:

我的应用程序中有很多这样的单元格。有的自选尺寸,有的没有。

例如,假设我们有一个自定义 UITableViewCell。 100 高。在它的内容视图中,我们拖动 2 个 UIView。 UIViewTop 和 UIViewBottom。每个50高。 UIViewTop 我们放置在内容视图的顶部,并给它Leading/Trailing/Top/Height 约束。 UIViewBottom 我们放置在内容视图的底部,并给它Leading/Trailing/Bottom/Height 约束。我们还给出了 UIViewTop 和 UIViewBottom 之间的垂直间距约束。

现在,有时我们只希望显示 UIViewTop,而有时我们希望显示 UIViewTop 和 UIViewBottom。所以我们拖出 UIViewBottomHeight 约束作为 IBOutlet NSLayoutConstraint。

然后,在 cellForRowAtIndexPath... 中,我们将此 IBOutlet 约束设置为 0 或 50,具体取决于我们是否要显示该部分。

如果我们有自调整大小的单元格,我们什么也不做。如果我们没有自我调整大小的单元格,则单元格的大小在 heightForRowAtIndexPath 中准确确定。

在这两种情况下我都会收到警告。在调试器中,它会在下面的代码之后立即发生...

`cell.constraintUIViewBottomHeight.constant = __`

我希望能够更改约束常量,但不会在控制台中收到Unable to simultaneously satisfy constraints 警告。

【问题讨论】:

    标签: ios objective-c uitableview nslayoutconstraint


    【解决方案1】:

    我猜constraintUIViewBottomHeight 约束的优先级是Required/1000 ..我会尝试通过将优先级降低到999 或其他什么来摆脱警告..

    【讨论】:

    • 为我工作,我遇到了同样的问题,但这样做时问题就消失了。
    【解决方案2】:

    听起来问题正在出现,因为您在底部的 UIView 上同时具有高度约束和底部到容器约束。如果更改高度,则底部到容器的约束将关闭。您应该能够仅使用高度(或仅使用底部到容器)并完全摆脱底部到容器约束(或高度约束)。自动布局只需要足够的约束来确定元素的唯一大小和位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2020-08-01
      相关资源
      最近更新 更多