UITableViewAutomaticDimension无法在iOS 8上运行

时间:2016-01-04 03:27:55

标签: swift ios8 ios9 uicollectionviewcell uitableviewautomaticdimension

我正在关注这个tutorial以制作自我调整大小的细胞。

我将自定义单元格注册到表格视图中,在单元格xib中,我手动给出了每个子视图约束。请参阅source code in GitHub

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

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

iOS 8不合适:

enter image description here

iOS 9正如我所料:

enter image description here

任何建议都将不胜感激!

更新

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

6 个答案:

答案 0 :(得分:12)

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

    cell.setNeedsUpdateConstraints()
    cell.updateConstraintsIfNeeded()

答案 1 :(得分:6)

要使其在iOS 8上运行,您需要做三件事:

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

tableView.estimatedRowHeight = 200.0

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

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

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

cell.updateConstraintsIfNeeded()

return cell

注意:iOS 9 +

不需要第3步

答案 2 :(得分:4)

给UILabel使用顶部,底部,前导,尾随对比。 检查numberOfLine必须为0 然后在下面设置方法

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

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

现在运行项目:)

答案 3 :(得分:2)

这两行为我做了诀窍:

tableView.estimatedRowHeight = 200.0
tableView.rowHeight = UITableViewAutomaticDimension

我从其他答案中尝试的其他所有内容都没有用。

答案 4 :(得分:1)

我无法使其工作......我检查了此线程中的所有提示,但表视图单元格没有调整其高度。

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

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

答案 5 :(得分:1)

版本10.1

UITableViewAutomaticDimension重命名为UITableView.automaticDimension