UITAbleViewCell 中具有动态高度的多个 UILabel

Multiple UILabels in UITAbleViewCell with dynamic height

在一个空的 UITableViewCell 中,我有两个 UILabel 像这样对齐:|--label1----label2--|。 两者 都将动态填充。我需要以两个标签保持居中对齐的方式设置约束,但 单元格的高度 由具有 最多内容 的标签确定. 到目前为止:

为单元格添加(较低优先级)固定高度约束(例如 = 40)。

为每个标签添加顶部和底部约束。使顶部约束为固定边距(例如 = 8)。使底部约束成为(更高优先级)大于或等于约束(例如 >= 8)。

单元格的高度将由较高的标签决定,所有其他垂直约束仍将得到满足。

更新:

事实证明,您不需要单元格的固定高度约束,甚至不需要调整水平内容拥抱或压缩阻力优先级。

我将标签的顶部和左侧或右侧边缘固定到 superview.margin, = 0,并在标签之间添加了水平 space >= 4.

我将标签的底部边缘固定到 superview.margin,>= 0。我还将两个标签的垂直压缩阻力优先级设置为 1000。

至此,我们已经设置了最低限度的必要约束。但是,如果两个标签都很长,一个标签将占据大部分宽度,迫使另一个标签变得非常窄。我任意地为两个标签添加了宽度 >= 100 的约束以平衡事情。

-viewDidLoad 中启用自动调整大小,然后分配标签文本,并让单元格自行布局。没有必要覆盖自定义 UITableViewCell.

中的任何内容
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 44.0;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

     cell.leftLabel.text = ...;
     cell.rightLabel.text = ...;

     [cell setNeedsLayout];
     [cell layoutIfNeeded];

     return cell;
}