我正在尝试使用swift(iOS 8)创建我的第一个iOS应用程序。
我有一个UITableView和一个CustomCell。
该应用程序是一种新闻自动收报机。启动应用程序后,它会从Web服务器加载所有新闻并将新闻保存到阵列中。
自定义单元格具有动态高度。我在cell.layoutIfNeeded()
中调用tableView:cellForRowIndexPath
以使动态单元格高度正常工作。否则,单元格高度无法正确显示。我在堆栈溢出时发现提示here。
图片:After getting all news, the cells are displayed correctly
使用SIOSocket我得到一个带有新消息的事件,我想将其插入UITable。
所以我创建了一个方法,将新闻插入到我的数组中,并在tableView.insertRowsAtIndexPath
,beginUpdates()
之间调用endUpdates()
。
这就是问题的起点。新单元格正确显示,但所有其他可见单元格缩小为默认单元格高度(44pt)。
图片:After I added a new entry, the old cells are too small
滚动后,单元格会更新,现在可以再次正确显示。
当我不使用insertRowsAtIndexPath
但tableView.reloadData()
时,它正在运行。但我认为为每一条新闻调用reloadData都不是好事。当然重装后没有动画......
任何人都可以解释为什么会发生这种情况,是否有任何解决方案可以解决这个问题? 感谢
答案 0 :(得分:5)
当我将estimatedRowHeight设置为任何值时,问题就会消失。
tableView.estimatedRowHeight = 44
viewDidLoad
方法中的完全解决了我的问题。
答案 1 :(得分:2)
具有自动维度的节标题视图可能会产生此类问题 因此删除以下行将解决问题。
tableView.sectionHeaderHeight = 10;
tableView.estimatedSectionHeaderHeight = UITableViewAutomaticDimension;
自动维度行不会产生任何问题。
tableView.estimatedRowHeight = 15;
tableView.rowHeight = UITableViewAutomaticDimension;