界面生成器表示UITableView单元格需要约束,但它们不需要约束

时间:2018-07-03 19:25:22

标签: ios uitableview autolayout interface-builder xcode9

我有一个带有UITableView的视图控制器。我将其设置为具有动态原型单元格,设置第一个单元格的样式为“自定义”,并向该单元格添加一些子视图。

每当我这样做时,IB都会抱怨,显示红色警告,并拒绝对单元格进行布局,即使它在正在运行的应用程序中可以正常工作。有什么问题吗?

下面的屏幕截图显示了详细信息。

首先,尽管UITextField浮动在单元格上方一半,但其超级视图受到中心y约束,因此应将其放置在单元格的中间。

enter image description here enter image description here

单击“更新框架”按钮没有任何作用。

IB还对左侧的图像视图做出虚假声明。它说它需要一个“ Y位置或高度”。但是,它同时具有:50 pt的高度,以及对单元顶部和底部的约束。

enter image description here

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

您的拇指图像约束可能在原型单元格的高度上彼此冲突。顶部空间+底部空间+高度大于原型单元的高度。 Interface Builder不知道如何布置该布局或不打破哪个约束。您有几种选择:

  1. 修改原型单元的高度以匹配期望的高度,以便约束不会发生冲突。

  2. 将3个约束之一更改为小于所需的优先级。这将使Interface Builder可以打破该约束以满足其他两个约束。

  3. 更改约束以适合原型单元格高度。与选项1类似,但更改约束以适合高度而不是更改高度以适合约束。

当涉及到单元格高度时,Interface Builder并不是很宽容,尤其是当它们包含一个内容视图时,由于分隔符,该视图的高度是分数的。我猜您的问题出在这三个约束的总和等于70,但您的内容视图高度约为70.5。我发现通常最好在容器约束中使用顶部约束,高度约束和垂直居中位置,而不是顶部,高度和底部。