【问题标题】:Interface builder says that UITableView cells need constraints, but they don't界面生成器说 UITableView 单元格需要约束,但它们不需要
【发布时间】:2018-12-12 04:28:55
【问题描述】:

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

每当我做这样的事情时,IB 都会抱怨,显示红色警告,并拒绝布局单元格,即使它在正在运行的应用程序中运行良好。有什么问题?

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

首先,UITextField 在单元格上方浮动一半,尽管它的超级视图有一个 center-y 约束,应该将它放在单元格的中间。

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

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

【问题讨论】:

  • 我建议重新开始...从单元格中删除元素...将单元格高度设置为70...添加图像视图,并将其大小调整为50 x 50并定位顶部的10 和左侧的10 .. 将其约束设置为Top: 10 / Leading: 10 / Bottom: 10 / Width: 50 / Height: 50 并查看IB 是否告诉您它可以。然后添加您的文本字段,设置其领先约束(来自图像视图的20)并垂直居中。看看 IB 是否正常。然后添加“眼睛”图像(或按钮)并设置其约束。

标签: ios uitableview autolayout interface-builder xcode9


【解决方案1】:

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

  1. 修改原型单元格的高度以匹配预期高度,这样约束就不会发生冲突。

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

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

Interface Builder 在单元格高度方面不是很宽容,尤其是当它们包含由于分隔符而具有分数高度的内容视图时。我猜你的问题来自这 3 个约束的总数等于 70,但你的内容视图高度大约是 70.5。我发现通常最好使用顶部约束、高度约束和容器中的垂直居中约束,而不是顶部、高度和底部。

【讨论】:

  • 在应用程序中,我使用自动布局来计算表格行高。奇怪的是,他们在 IB 中没有等价物,可以从其内部视图设置单元格高度。我正在尝试选项 #1,它可以消除红色错误,但“更新框架”按钮仍然没有布局单元格。
  • @RobN 如果您有有效的约束,您可以在情节提要中使用自动尺寸,或以编程方式返回 UITableViewAutomaticDimension。有时您需要调整一个视图的垂直压缩阻力和内容拥抱优先级以使其具有灵活性。
  • @JakeG 我在代码中将 rowHeight 设置为 UITableViewAutomaticDimension,但是 IB 故事板中的等效选项在哪里?我没看到。
  • 我相信代码总是会覆盖 Storyboard,所以如果约束有效,那么“应该”工作。但是,在情节提要中,如果您单击 tableview,在 Size Inspector(标尺图标)下,确保自动检查 Row Height。
猜你喜欢
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多