-1

我想在 UICollectionView 中实现流畅的分页体验。这个想法很简单:当到达 collectionView 的最后一个单元格时触发 API 调用。

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

if indexPath.row == dataGroup.data.count-1{
        
        print("last cell visible" )

        self.isPaginating = true
        Service.shared.fetchData(page: self.page) { rawData, error in
            if let error = error{
                print("error while fetching app groups", error)
                return
            }
            sleep(2)
            if let data = rawData{
                self.dataGroup?.data += data.data
                DispatchQueue.main.async {
                    self.collectionView.reloadData()
                }
                self.page+=1
                self.isPaginating = false
            }
        }
    }

 //returning cells

}

即使我不滚动 collectionView,if indexPath.row == dataGroup.data.count-1也会true触发 API 调用。可能是什么原因?

PS。我观察到data.count加载所有数据时分页停止。我只是将其删除以简化问题中的代码。

4

1 回答 1

0

尝试将您的代码移入

collectionView(_ collectionView: UICollectionView, 
             willDisplay cell: UICollectionViewCell, 
               forItemAt indexPath: IndexPath)

https://developer.apple.com/documentation/uikit/uicollectionviewdelegate/1618087-collectionview

并添加检查:

    if collectionView.indexPathsForVisibleItems.lastObject.row == dataGroup.data.count-1. { 
do something
}
于 2021-09-06T06:26:09.970 回答