插入行后 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 出现后更改其高度