UITableViewAutomaticDimension 不适用于 iOS 8

UITableViewAutomaticDimension not working on iOS 8

我正在按照这个 tutorial 来制作自调整大小的单元格。

我将自定义单元格注册到 table 视图中,并在单元格 xib 中手动设置了每个子视图约束。请参考 source code in GitHub

在一个单元格的内容视图中垂直排列 3 个标签在 iOS 9 中运行良好,但在 iOS 8 中运行良好(均在设备和模拟器中测试)。

在iOS8个单元格中没有合适的高度并且不是每个标签都显示它的全文。

iOS 8个不合适:

iOS 9如我所料:

如有任何建议,我们将不胜感激!

更新

viewDidLoad中的代码:

 tableView.registerNib(UINib.init(nibName: "SelfSizingCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
 tableView.dataSource = self
 tableView.delegate = self
 tableView.estimatedRowHeight = 60.0
 tableView.rowHeight = UITableViewAutomaticDimension
 tableView.reloadData()

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

    cell.setNeedsUpdateConstraints()
    cell.updateConstraintsIfNeeded()

为使用的 UILabel 提供顶部、底部、前导、尾随约束。 检查行数必须为 0 然后设置以下方法

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;}

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;}

现在运行项目:)

要使其在 iOS 8 上运行,您需要 3 个东西:

1) 在您的视图中设置 table "estimated row height" 加载方法。

tableView.estimatedRowHeight = 200.0

2) 实施"table view height for cell at... method"。 (如果您的 class 不是 'UITableViewController' 的子 class 并且您要自己添加 table 视图,请删除 'override'。

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

3) 当你在 'table view cell for row at...' 方法中 return 你的单元格时调用 'updateConstraintsIfNeeded' 方法。

cell.updateConstraintsIfNeeded()

return cell

注意:iOS 9+

不需要第 3 步

我无法让它工作...我检查了该线程中的所有提示,但 table 视图单元格未调整其高度。

我在故事板的 table 视图中将相同的自定义 table 视图单元设置为原型单元,并且 它起作用了。
出于可重用性的原因,我将单元设置为 xib。 table 视图加载,但单元格不再调整大小。它似乎适用于故事板,但不适用于 xib table 视图单元格。
我在每个电视单元内都有一个 UICollection 视图,其中包含不同数量的 cv 单元,这就是每个电视单元的高度不能相同的原因。

我没有更改任何函数调用,例如self.tableview.beginUpdates() 和 .endUpdates() 在多个地方被调用。 我使用 Xcode 8.3.2

这两行对我有用:

tableView.estimatedRowHeight = 200.0
tableView.rowHeight = UITableViewAutomaticDimension

我从其他答案中尝试的所有其他方法均无效。

版本 10.1

UITableViewAutomaticDimension 重命名为 UITableView.automaticDimension