我正在尝试collectionView:prefetchItemsAt
协议的新collectionView:cancelPrefetchingForItemsAt
和UICollectionViewDataSourcePrefetching
方法,但这两种方法都没有被调用。委托是通过接口构建器设置的(尝试从具有相同结果的代码),部署目标设置为iOS 10,因此理论上它应该工作。所以我的问题是,为了使它工作,我错过了一些东西,或者机制比我想象的更复杂,系统没有觉得它应该进行预取?
答案 0 :(得分:1)
继承UICollectionViewDataSourcePrefetching
中的协议ViewController
:
class ViewController: UIViewController, UICollectionViewDataSourcePrefetching {
将以下代理设置到storyboard中的集合视图(请参阅附图),或以编程方式执行此操作。
override func viewDidLoad() {
super.viewDidLoad()
collectionView.delegate = self
collectionView.dataSource = self
collectionView.prefetchDataSource = self
}
请参阅此示例:https://github.com/Be-With-Viresh/CollectionViewWithPrefetch
答案 1 :(得分:1)
可能是您正在设置estimateItemSize,在这种情况下可能不会调用预取。
来源:在一个迷你演示应用程序中进行了尝试。
答案 2 :(得分:1)
来自docs:
集合视图不会立即为需要的单元格调用此方法,因此您的代码不得依赖此方法加载数据
答案 3 :(得分:0)
您必须检查集合视图属性是否已启用“ isPrefetching”。如果未启用,则将其值设置为true。
collectionView.isPrefetchingEnabled = true
答案 4 :(得分:0)
重写func collectionView(_ collectionView:UICollectionView,willDisplay单元格:UICollectionViewCell,forItemAt indexPath:IndexPath){
//向此功能添加代码
self.collectionView(collectionView,prefetchItemsAt:[indexPath])<<<<<< / p>
}