如何从 UITableViewCell 更新 heightForRow

How to update the heightForRow from UITableViewCell

我目前的设计工作方式是我将一个单元格出列并给它一个故事 ID。在单元格 initWithStyle 中,我创建 mysubView (UILabel),设置 autolayout 约束并触发 API 请求以加载故事标题 async .然后我设置 UILabel.

的文本

问题是 - 此时 UITableViewController 已经为单元格计算了错误的高度,因为最初 UILabel 没有 text。现在更新它的唯一方法是

parentTableView.beginUpdates
parentTableView.endUpdates

但感觉不对,因为我需要从单元格中引用 parent UITableView 并且必须有更好的方法。我错过了什么吗?顺便说一句,我使用 UITableViewAutomaticDimension 作为行高。

在 return 单元格之前的 "cellForRowAtIndexPath" 方法中添加以下代码。

cell.setNeedsUpdateConstraints() cell.updateConstraintsIfNeeded()

也只能使用"updateConstraintsIfneeded"

我建议您观看 Session 211 的 WWDC 2012,构建并发用户界面并应用那里的概念。这具有其内容被独立查询和呈现的单元格。

基本概念如下:
1. tableView:cellForRowAtIndexPath中实例化了一个cell
2. 在相同的方法中,创建用于检索数据以填充单元格的操作并将其存储到字典中。对单元格的引用被传递给操作。该操作有一个完成处理程序,用于填充单元格并从字典中删除操作。
3. 在从方法返回单元格之前,将操作添加到操作队列。
4. 在tableView:didEndDisplayingCell:forRowAtIndexPath中,对移出屏幕的单元格的操作被取消并从字典中删除。