插入行后 UITableViewCell 动态高度中断

Posted

技术标签:

【中文标题】插入行后 UITableViewCell 动态高度中断【英文标题】:UITableViewCell dynamic height breaks after insert row 【发布时间】:2014-12-19 01:10:28 【问题描述】:

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

我有一个 UITableView 和一个 CustomCell。 该应用程序是一种新闻行情。启动应用程序后,它会从 Web 服务器加载所有新闻并将新闻保存到数组中。 自定义单元格具有动态高度。我在tableView:cellForRowIndexPath 中调用cell.layoutIfNeeded() 以使动态单元格高度正常工作。否则单元格高度无法正确显示。我在堆栈溢出时发现了提示here。 图片:After getting all news, the cells are displayed correctly

使用 SIOSocket,我得到一个带有新消息的事件,我想将它插入 UITable。 所以我创建了一个将新闻插入我的数组并在beginUpdates()endUpdates() 之间调用tableView.insertRowsAtIndexPath 的方法。 这就是问题开始的地方。新单元格正确显示,但所有其他可见单元格都缩小到默认单元格高度 (44pt)。 图片:After I added a new entry, the old cells are too small 滚动一些单元格后,单元格已更新,现在再次正确显示。

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

谁能解释一下为什么会发生这种情况,有什么解决方案可以解决这个问题吗? 谢谢

【问题讨论】:

【参考方案1】:

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

tableView.estimatedRowHeight = 44

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

【讨论】:

这对我不起作用。如果您在设置应用程序/辅助功能中将文本大小设置为非常大,这对您有用吗?【参考方案2】:

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

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

具有自动维度的行不会产生任何问题。

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

【讨论】:

以上是关于插入行后 UITableViewCell 动态高度中断的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 的动态高度

在动态高度 UITableViewCell 出现后更改其高度

动态高度 UITableViewCell 闪烁

Swift / 如何使用具有动态高度的 UITextView INSIDE UITableViewCell 与动态高度

带标签的 UITableViewCell 动态高度

我需要设置 UITableViewCell 动态高度,带有 UIImageView 的多个动态标签