我发现当我使用tableView.insertSection
代替tableView.reloadData
时,我的用户界面会在滚动期间冻结更长时间。为了测试出错了什么,我实现了一个计数器,每次输入viewForHeaderInSection
时都会递增。在我调用insertSection
或reloadData
方法之前,计数器会重置为0。基本上,当用户到达tableView的底部时,我的应用程序会在桌面上再加载五个帖子。以下是代码和结果。
在我的viewForHeaderInSection
内,我将单元配置为显示图像,数据
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
enterCount += 1
// configure cell
}
Method 1:
enterCount = 0
for post in downloadedPostArray {
downloadedPostArray.append(post)
let sections = NSIndexSet(index: myPosts.count - 1)
myTableView.insertSections(sections, withRowAnimation: .None)
}
Method 2:
enterCount = 0
for post in downloadedPostArray {
downloadedPostArray.append(post)
}
myTableView.reloadData()
method 2
的结果,
首次启动时,计数器从1变为2.因为只有2个部分可用
当我向下滚动时,数字增加到8然后我点击loadMoreFunction
,将counter
重置为0。
然后,如果我向下滚动更多,上面的步骤将重复计数器始终从1到8的位置。 (正如预期的那样)
方法1的奇怪结果,
首次启动时,计数器从1到10。 当我向下滚动时,屏幕冻结,计数器从1到33。 当我向下滚动时,屏幕会冻结更长时间,计数器从1到53.
滚动越多,数字越高。我理解为什么屏幕冻结,因为它试图配置ViewForHeaderInSection
这么多次。
我希望通过插入没有viewForHeaderInSection
的行来实现无限滚动,这样会多次冻结我的UI
。理想情况下,它应该被称为最小的amout次,所以我有一个平滑的UI
。