Swift-UICollectionViewDataSourcePrefetching忽略一个部分

问题描述

用户滚动浏览某个部分时,我正在努力预取数据。

我有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(我的手机屏幕和控制台的图像)

enter image description here

解决方法

您不能依赖此方法来为每个单元格/部分调用。如果添加更多部分并滚动,则可能会看到它被调用。

来自apple's docs“在用户滚动时,集合视图将调用此方法,为可能在不久的将来显示的单元格提供索引路径[...]集合视图不会针对以下对象调用此方法单元立即需要它,因此您的代码不得依赖此方法来加载数据。”

在您的示例中,当您开始滚动时,看起来像是立即点击了第3部分,没有太多引导,因此您可能碰到了“立即需要的单元格”情况。