当宽度 >= 和 <= 时,UITableView 的约束不明确

Ambiguous constraint for UITableView when width >= and <=

正在尝试将 table 视图宽度设置在 290 到 460 点之间。 它足以为小屏幕显示内容,并且对于 iPad Pro 等大屏幕来说看起来不错。 另外我想要前导和尾随 space >= 20.

今天是我尝试修复“不等式约束歧义”的第二天... 感谢您的帮助!

我是 iOS 开发人员的新手所以请不要踢我太多 :)

如果我对你的目标的理解正确,你希望你的 table 观点是:

  • 前导和尾随 20 点
  • 除非 使 table 视图比 460 点宽
  • 在这种情况下,table 视图应水平居中

所以,回顾一下我的评论……你的限制条件是:

  • 使 table 视图水平居中
  • 前导和尾随 >= 20 分
  • 使宽度介于 290460
  • 之间

问题是您没有告诉 auto-layout 您希望宽度在 290460 之间结束。

因此,您需要更多约束。

开始简单...table查看受限的 20 点顶部/前导/尾随和 Zero-pts 底部(当然全部到安全区域):

接下来,添加 第二组 的 20 磅前导和尾随约束:

现在将一对设置为 >=,并为另一对设置优先级 less-than 要求:

= 对 Leading/Trailing 约束的 Default High 750 优先级告诉 auto-layout 到 “尝试将边拉到 20 点边缘,但如果冲突约束具有更高的优先级,则允许​​打破它,并且>=对上的Required 1000优先级给我们一个最小值 每边 20 点。

如果我们切换到横向 (iPhone 11),一切看起来都一样...20 分顶部/前导/尾随和 Zero-pts 底部:

但是... 你的目标是 max-width 的 460,所以让我们添加一个宽度<= 460 的限制条件:

我们看到约束有红色问题,因为我们还没有提供 auto-layout 足够的信息 - 因此,我们将添加水平中心约束:

这是它在 9.7" iPad 上的样子:

我们不需要——也不想要——>= 290宽度限制。 = 20 约束将处理该问题。而且,虽然现在不太可能,但如果您的应用最终出现在 iPhone 4s 或第一代 SE 上,则视图宽度仅为 320... 和 290 + 20 + 20 == 330,您将拥有约束冲突。