TableView insertSection调用ViewForHeaderInsection的次数太多了

时间:2016-09-26 08:24:25

标签: ios swift uitableview

我发现当我使用tableView.insertSection代替tableView.reloadData时,我的用户界面会在滚动期间冻结更长时间。为了测试出错了什么,我实现了一个计数器,每次输入viewForHeaderInSection时都会递增。在我调用insertSectionreloadData方法之前,计数器会重置为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

0 个答案:

没有答案