使用insertRowsAtIndexPaths添加的UITableView单元格未正确绘制/布局

时间:2015-01-12 14:48:08

标签: ios iphone uitableview swift

我有一个UITableView分为几个部分,其中一些我试图使其可折叠 - 点击一个部分的标题,该部分中的单元格将展开/折叠。

我在tableView.insertRowsAtIndexPaths(indexPaths, withRowAnimation: .Automatic)self.tableView.beginUpdates()区域内使用self.tableView.endUpdates()执行此操作。

第一次打开一个部分时(即第一次向部分添加行),内部的单元格没有正确布局。我得到的是一个标准44pts高的单行单元格,而不是多行文本和高度扩展到符合所需内容的单元格,其文本用省略号截断。

单元格的高度通常由estimatedHeightForRowAtIndexPath返回UITableViewAutomaticDimension控制。

当单元格在屏幕上滚动或者某个部分关闭并重新打开时,单元格似乎会重新绘制并显示正确的布局。

在将新单元格动画化为视图之前,有没有办法让单元格/节/表重绘自己?

我尝试self.tableView.reloadData()reloadRowsAtIndexPaths之类的内容未成功,但我可能没有正确使用这些内容。

我认为我有正确的代码,但由于缺少更好的术语,它可能在“渲染序列”中的错误位置。

非常感谢!

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并且能够通过为tableView设置一个estimatedRowHeight来解决这个问题。默认值为0,因此将其设置为正值似乎可以解决问题:

tableView.estimatedRowHeight = 44.0;

答案 1 :(得分:0)

self.mainTableView.beginUpdates()
    self.mainTableView.insertRowsAtIndexPaths(indexPaths, withRowAnimation: UITableViewRowAnimation.Fade)
    self.mainTableView.reloadRowsAtIndexPaths(self.mainTableView.indexPathsForVisibleRows!, withRowAnimation: UITableViewRowAnimation.Fade)
    self.mainTableView.endUpdates()

这对我来说非常适合。