【问题标题】:Simple UIStackView in UITableViewCell not working out height properly in IBUITableViewCell 中的简单 UIStackView 在 IB 中无法正确计算高度
【发布时间】:2017-11-29 21:02:39
【问题描述】:

我的布局如下:

Table View (dynamic prototypes, row: automatic height and estimate)
  Table View Cell (row height: default)
    Content View
      Stack View (axis: horizontal, alignment: center, distribution: fill)
        Image View (height: 70, width: 70)
        Label

UITableView 对其父视图具有所有 4 个约束(顶部、底部、前导和尾随)。 UIStackView 也是如此,相对于它的 superview。

问题是行高不是在界面生成器内部计算的,实际上它指向以下冲突的约束:

bottom = Stack View.bottom
height = 70
Stack View.top = top
centerY = Image View.centerY

我发现这个布局超级简单,我不明白为什么它不起作用。

【问题讨论】:

  • 显示实际的“冲突约束”消息。
  • 在运行时没有明显的冲突,但是,IB 说有...
  • 图像视图的 centerY 约束是什么?
  • 它是由 Stack View 强加的,它将其视图与中心对齐,如对齐属性所述。
  • 啊 - 抱歉,我没有注意到您的 (row height: default) 评论。看我的回答。

标签: ios uitableview interface-builder uistackview


【解决方案1】:

如果您当前的 Storyboard 看起来像前两张图片:

那么问题在于您在70 的图像视图上设置了高度约束,但表格视图单元格的默认高度仅为44。这并没有为自动布局留下足够的空间来满足所有约束。

如果您将行高(在“大小检查器”窗格中)更改为 71,冲突的约束就会消失:

【讨论】:

  • 确实是这样。我曾希望 IB 会更聪明一点,并根据其子项的固有大小计算行高。此外,行高应该是 71 而不是 70 很奇怪......而且选择更高的行高 (>71) 对 IB 来说不是问题,因为所有约束都设置为“相等”而不是“大于'。
  • 框架有一个半点“填充”(我相信处理分隔线),所以 71 是正确的。 IB 不会“自动调整”行高,因为它无法知道您打算如何使用单元格——运行时不同的固定高度?自动调整高度?等
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
  • 1970-01-01
  • 2016-01-26
  • 2017-11-28
  • 2016-05-19
  • 2014-12-24
相关资源
最近更新 更多