我想知道如何使用UICollectionView来实现按需加载所需的效果,就像在亚马逊应用程序中进行搜索时一样,它仅返回许多项目,直到滚动结束,然后将其设置为加载更多的单元格,然后继续进行,直到显示搜索中的所有产品为止。

例如,如下图所示:

通常,您必须在numberOfItemsInSection中设置数据源的项目数,如何进行设置?先设置项目的总数,然后再懒加载它?

提前致谢。

最佳答案

使用上面的crazy_phage这样的scrollViewDidScroll函数,您可以观察到何时最终到达CollectionView的决赛,然后可以通过以下方式更新numberOfRowInSections并调用reloadData:

class CollectionSampleViewController: UICollectionViewController {

    private let reuseIdentifier1 = "Cell"
    private var numberOfItemsPerSection = 9

    override func viewDidLoad() {
       super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
    }

    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
       return 1
    }

    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
       return numberOfItemsPerSection
    }

    override func scrollViewDidScroll(scrollView: UIScrollView) {
       let offsetY = scrollView.contentOffset.y
       let contentHeight = scrollView.contentSize.height

       if offsetY > contentHeight - scrollView.frame.size.height {
          numberOfItemsPerSection += 6
          self.collectionView.reloadData()
       }
    }
}

reloadData函数调用时,其滚动将保留在同一位置,并且将加载新数据。

在上面的代码中,您可以使用事件指示器 View 或您想要添加到代码中的其他任何内容。

10-05 20:34
查看更多