【问题标题】:UICollectionView triggers pagination without scrollingUICollectionView 无需滚动即可触发分页
【发布时间】:2021-11-03 05:25:34
【问题描述】:

我想在 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 调用。可能是什么原因?

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

【问题讨论】:

    标签: ios swift pagination uicollectionview


    【解决方案1】:

    尝试将代码移入

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多