6

我正在按照本教程制作自我调整大小的单元格。

我将自定义单元格注册到表格视图中,并在单元格 xib 中手动给了每个子视图约束。请参考GitHub 中的源代码

在一个单元格的内容视图中垂直排列 3 个标签在 iOS 9 中效果很好,但在 iOS 8 中却不行(在设备和模拟器中都进行了测试)。

在 iOS 8 中,一个单元格没有合适的高度,并且不是每个标签都显示它的全部文本。

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()
4

6 回答 6

13

在返回单元格之前在“cellForRowAtIndexPath”方法中添加以下代码。

    cell.setNeedsUpdateConstraints()
    cell.updateConstraintsIfNeeded()
于 2016-04-19T07:15:14.603 回答
6

要让它在 iOS 8 上运行,你需要 3 件事:

1)在您的视图上设置您的表格“估计行高”加载方法。

tableView.estimatedRowHeight = 200.0

2)实现“单元格的表格视图高度...方法”。(如果您的类不是“UITableViewController”的子类并且您自己添加表视图,请删除“覆盖”。

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

3) 当您在“表视图单元格中的行...”方法中返回单元格时,调用“updateConstraintsIfNeeded”方法。

cell.updateConstraintsIfNeeded()

return cell

注意:iOS 9+ 不需要步骤 3

于 2016-12-15T09:17:32.717 回答
4

为使用的 UILabel 提供 Top、Bottom、Leading、Trailing 约束。检查 numberOfLine 必须为 0 然后设置下面的方法

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

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

现在运行项目:)

于 2016-06-14T13:53:00.883 回答
3

10.1 版

UITableViewAutomaticDimension 重命名为 UITableView.automaticDimension

于 2018-12-25T16:51:09.330 回答
2

这两行对我有用:

tableView.estimatedRowHeight = 200.0
tableView.rowHeight = UITableViewAutomaticDimension

我从其他答案中尝试的所有其他方法都不起作用。

于 2017-11-23T13:43:52.243 回答
1

我不能让它工作......我检查了这个线程中的所有提示,但表格视图单元格没有调整它们的高度。

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

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

于 2017-05-22T07:11:53.023 回答