UITableViewCell动态高度在插入行后中断



我正在尝试用swift(iOS 8(制作我的第一个iOS应用程序。

我有一个UITableView和一个CustomCell。该应用程序是一种新闻自动收报机。启动应用程序后,它会从Web服务器加载所有新闻并将新闻保存到数组中。自定义单元格具有动态高度。我在tableView:cellForRowIndexPath中调用cell.layoutIfNeeded()以使动态单元格高度正常工作。否则,单元格高度无法正确显示。我在堆栈溢出中找到了这个提示。图片:获取所有新闻后,单元格正确显示

使用SIOSocket,我得到了一个带有新消息的事件,我想将其插入UITable。所以我创建了一个方法,将新闻插入我的数组中,并在beginUpdates()endUpdates()之间调用tableView.insertRowsAtIndexPath。这就是问题开始的地方。新单元格显示正确,但所有其他可见单元格将缩小为默认单元格高度 (44pt(。图片:添加新条目后,旧单元格太小滚动一段时间后,单元格将更新,现在再次正确显示。

当我不使用insertRowsAtIndexPath而是tableView.reloadData()时,它就可以工作了。但我认为为每个新消息调用 reloadData 并不好。当然,重新加载后没有动画...

任何人都可以解释为什么会发生这种情况,是否有任何解决方案可以解决这个问题?谢谢

当我将 estimatedRowHeight 设置为任何值时,问题就消失了。

tableView.estimatedRowHeight = 44

viewDidLoad方法中完全解决了我的问题。

具有自动维度的分区标题视图可能会产生此类问题因此,删除下面的行将解决问题。

tableView.sectionHeaderHeight = 10;
tableView.estimatedSectionHeaderHeight = UITableViewAutomaticDimension;

具有自动尺寸的行不会产生任何问题。

tableView.estimatedRowHeight = 15;
tableView.rowHeight = UITableViewAutomaticDimension;

最新更新