使用包装标签增加 TableViewCell 高度

Grow TableViewCell height with wrapping Label

我在自定义 TableViewCell 中有以下四个 Labels,目前看起来像这样:

我有这个:

第一个、第三个和第四个标签的宽度限制是固定的,最大行数设置为 1。第二个 Label 填充标签一和标签三之间的水平 space。

我希望第二个 Label 最多换行 2 行并垂直对齐到顶部,以便每个标签的第一行对齐如下:

我想要这个:

我已将每个标签的背景色设为灰色,以便可以看到约束条件。

要使UILabel 顶部对齐,您可以将所有UILabel 的margin 顶部约束设置为常量,或者设置顶部对齐约束。要设置顶部对齐约束,select 标签并按住 ctrl 从标签拖动到另一个标签。 Select 弹出窗口的顶部对齐方式。

要记住的一件事是,对于第二个标签,将 4 个边距长度设置为 5pt 左右,但不要像其他标签那样限制其宽度或高度。

在 select 添加第二个标签后,在右侧的实用程序面板中最多可以配置 2 行。

动态改变单元格的高度有点棘手。首先,您应该知道文本是否足够长以将标签拉伸成 2 行以及标签的高度。 (See Here) 如果文本长到足以占两行,该方法将 return 一个比正常情况下更大的高度值。基于这个高度变化,使用下面的 UITableViewDelegate 来动态改变那个 UITableViewCell 的高度:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

希望对您有所帮助。

您可以使用自动调整大小的单元格来实现此目的。为了使这项工作将这两行添加到您的 UITableview:

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 50

然后在 Interface Builder 的 Prototype Cell 中设置以下约束:

取消选中所有约束的 "Constraint to margins"。

标签 1:

  • 顶部:10
  • 左:10
  • 底部:更大或等于 10
  • 宽度:60(或任何实际宽度)

标签 2:

  • 顶部:10
  • 左:10
  • 底部:10

标签 3:

  • 顶部:10
  • 左:10
  • 底部:更大或等于 10
  • 宽度:60(或任何实际宽度)

标签 4:

  • 顶部:10
  • 左:10
  • 右:10
  • 底部:更大或等于 10
  • 宽度:60(或任何实际宽度)

如果您这样设置约束,当第二个标签将其文本换行到第二行时,单元格高度会自动变高。