我正在尝试使用在iOS 10中引入的预取。但无法实现它。
我设置了委托并启用了预取。但是当我在prefetch设置断点或控制台日志时,它不会通过该函数。
我知道在快速滚动时,会跳过预取。但即使在最慢的卷轴上,也从未被称为
var dataSource = [IndexPath: Any]()
override func viewDidLoad() {
if #available(iOS 10.0, *) {
mainCollectionView.isPrefetchingEnabled = true
mainCollectionView.prefetchDataSource = self
}
//Other stuffs
}
//This is not being called
func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) {
print("Prefectch")
for indexPath in indexPaths {
dataSource[indexPath] = fetchDataSource(indexPath)
}
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath) as! MyCell
cell.dataSource = dataSource[indexPath] ?? fetchDataSource(indexPath)
return cell
}
答案 0 :(得分:0)
打电话
override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
self.collectionView(collectionView, prefetchItemsAt: [indexPath])
}
触发预取,并删除:
collectionViewLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
如果你有的话。 这是我的情况。