我想知道如何使用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 或您想要添加到代码中的其他任何内容。