Ios 使用xib中的自定义单元格在UITableView中动态显示行高

Ios 使用xib中的自定义单元格在UITableView中动态显示行高,ios,swift,uitableview,tableview,cell,Ios,Swift,Uitableview,Tableview,Cell,让自定义单元格使用动态行高有很多问题 这是我的自定义单元格的xib 在我的表视图的viewDidLoad中,我设置了以下值: self.tableView.estimatedRowHeight = 80.0 self.tableView.rowHeight = UITableViewAutomaticDimension 但它在加载表时似乎没有使用动态大小 下面是我的cellForRowAtIndexPath函数 override func tableView(_ tableView: UIT

让自定义单元格使用动态行高有很多问题

这是我的自定义单元格的xib

在我的表视图的viewDidLoad中,我设置了以下值:

self.tableView.estimatedRowHeight = 80.0
self.tableView.rowHeight = UITableViewAutomaticDimension
但它在加载表时似乎没有使用动态大小

下面是我的cellForRowAtIndexPath函数

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // Configure the cell...

    let cell = Bundle.main.loadNibNamed("RedditCell", owner: self, options: nil)?.first as? RedditPostCellTableViewCell

    let post = self.model?.getPostAt(index: indexPath.row)
    cell?.title.text = post?.title
    cell?.author.text = post?.author
    cell?.upvotes.text = "\(post?.upvotes ?? -1)"

    return cell!
}


我不明白这为什么不起作用。任何帮助都将不胜感激

请尝试在
heightForRowAt

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    self.tableView.estimatedRowHeight = 80
    return UITableViewAutomaticDimension
}

您不需要预先计算高度。问题在于自定义
UITableViewCell
中的约束。您的约束应设置为强制UITableViewCell展开以显示整个标签或任何其他内容。只需设置类似于我的简短示例项目的约束,单元格高度将自动设置,如您所料


屏幕截图:

除了设置约束,以便可以使用单元格+填充中所有元素的高度来计算整个单元格高度外,还必须将标签的行数设置为零,并将它们设置为换行符(如果这些行数也必须根据内容增长)。

刚刚测试了您的项目。如果从UIStoryboard中删除“Labellab..”占位符,会发生什么情况?效果很好。我很快就做了这个例子,在布局上犯了一个小错误,但它在任何情况下都有效。这是一个没有“标签…”且布局没有错误的示例-而且,正如@Martin Muldoon所说,用户还必须设置行数=0和换行,但我没有提到它,因为它已经设置好了,正如我从截图上看到的一样。是的,几年前我上次测试它时,这是一个混乱,我不知道为什么它现在工作得如此完美,即使文档明确指出我们需要固定高度,要么我错过了一些东西,要么是旧iOS版本中的一些bug。现在看来效果不错,谢谢你!这真的很有帮助。虽然我很难理解你的约束和我的约束之间的区别。你能指出我具体应该做什么不同吗?