插入行后UITableViewCell动态高度中断

时间:2014-12-19 01:10:28

标签: ios uitableview swift autolayout

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

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

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

当我不使用insertRowsAtIndexPathtableView.reloadData()时,它正在运行。但我认为为每一条新闻调用reloadData都不是好事。当然重装后没有动画......

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

2 个答案:

答案 0 :(得分:5)

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

tableView.estimatedRowHeight = 44
viewDidLoad方法中的

完全解决了我的问题。

答案 1 :(得分:2)

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

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

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

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