具有多个标签的自调整单元格不显示多行标签

Self sizing cell with multiple labels does not show multiline label

我的静态 table 视图单元格中有三个标签,中间的标签应该是多行标签。

我在 viewDidLoad()

中设置这两行
self.tableView.estimatedRowHeight = 130.0
self.tableView.rowHeight = UITableViewAutomaticDimension

故事板看起来像这样

这是每个子视图的约束条件

顶部标签、中间标签、底部标签、按钮

我还将中间标签的行数设置为 0。但是它只显示一行,而不是多行。我想这一定与内容拥抱或内容压缩优先级有关,或者是因为我正在使用带有静态单元格的 UITableViewController

更新

如果我将中间标签的 Vertical Compression Resistance Priority 更改为 751 并将 Vertical Content Hugging Priority 更改为 250,标签显示多行,但单元格不会调整大小,因此顶部和底部标签在单元格之外现在。

更新 2

我刚刚创建了一个示例项目,结果证明它可以按预期使用动态单元格,但不能使用静态单元格。您可以在此处下载示例项目:https://dl.dropboxusercontent.com/u/67692950/ResizingCell.zip

您需要在设置多行标签的文本后在单元格上调用 layoutIfNeeded 或设置标签 preferredMaxLayoutWidth

首先,打开 Storyboard,将 tableview 行高设置为 100,取消选中 tableview 单元格的自定义行高,当前值为 100。

其次,如@DBoyer 所说,请致电layoutIfNeeded。如果您看到 "Unable to simultaneously satisfy constraints, Will attempt to recover by breaking constraint X",请将 X 的优先级降低到 999。我认为当您获取单元格时,警告可能与此有关,单元格框架是 CGRectZero

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = super.tableView(tableView, cellForRowAtIndexPath: indexPath)
    cell.layoutIfNeeded()
    return cell
}

我克隆了您的示例项目。我认为问题在于您不需要设置 UITableViewCell 的高度。

这是一个简单的解决方案。

・在 Table 视图单元格中设置行高 "Default"。(未选中自定义)

在这种情况下,它有效。

下载我在这里实现的示例项目: https://www.dropbox.com/s/w8q6ov9qjfxu1l3/ResizingCell.zip?dl=0

但另一种方法是根据 UILabel 的高度计算 UITableViewCell 的高度。

如果自定义cell比较复杂,最好将cell隔离为Custom cell。

对标签使用 aspectRatio 约束。它的目的是根据need.This改变宽度和高度将有助于