UICollectionview - prefetchItemsAt indexPaths - 未被调用

时间:2017-11-13 08:12:53

标签: ios swift uicollectionview

我正在尝试使用在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
}

1 个答案:

答案 0 :(得分:0)

打电话

override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
   self.collectionView(collectionView, prefetchItemsAt: [indexPath])
}

触发预取,并删除:

collectionViewLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize

如果你有的话。 这是我的情况。