问题描述
当用户滚动浏览某个部分时,我正在努力预取数据。
我有3个部分,当用户滚动浏览某个部分时,应该将更多数据加载到该部分。
我正在尝试使用UICollectionViewDataSourcePrefetching
来检查区域和商品编号。
这是我的测试代码:
extension discoverVC: UICollectionViewDataSourcePrefetching {
func collectionView(_ collectionView: UICollectionView,prefetchItemsAt indexPaths: [IndexPath]) {
let section = indexPaths.map({ $0.section }).max() ?? 0
let item = indexPaths.map({ $0.item }).max() ?? 0
switch section {
case 0:
if item == 5 {
print("Section \(section),Row \(item) - Loading more...")
}
break
case 1:
if item == 5 {
print("Section \(section),Row \(item) - Loading more...")
}
break
case 2:
if item == 5 {
print("Section \(section),Row \(item) - Loading more...")
}
break
default: break
}
}
}
但是由于某种原因,它忽略了第2节。 https://imgur.com/a/tNnJ9KG(我的手机屏幕和控制台的图像)
解决方法
您不能依赖此方法来为每个单元格/部分调用。如果添加更多部分并滚动,则可能会看到它被调用。
来自apple's docs“在用户滚动时,集合视图将调用此方法,为可能在不久的将来显示的单元格提供索引路径[...]集合视图不会针对以下对象调用此方法单元立即需要它,因此您的代码不得依赖此方法来加载数据。”
在您的示例中,当您开始滚动时,看起来像是立即点击了第3部分,没有太多引导,因此您可能碰到了“立即需要的单元格”情况。