UICollectionView cellForItemAt не вызывается после InsertItems (в :) - Как предварительно загрузить следующую ячейку? - PullRequest
0 голосов
/ 11 февраля 2020

Я работаю над горизонтальным UICollectionView с полноэкранными ячейками.

Ячейки имеют WKWebview внутри, который загружает URL следующей ячейки.

Когда следующий URL загружен, вставляется новая ячейка.

extension ViewController {
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: WebCell.reuseId, for: indexPath) as? WebCell else { fatalError("Unexpected indexPath") } 

        cell.configure()
        cell.startLoadingURL(urls[indexPath.item])

        return cell
    }
}
extension ViewController: WebCellDelegate {
    func onNextURLLoaded(_ sender: WebCell, nextUrl: URL) {
        ...
        urls.append(nextUrl)
        horizontalCollectionView.performBatchUpdates({
            horizontalCollectionView.insertItems(at: [IndexPath(item: urls.count-1, section: 0)])
        }, completion: nil)

    }
}

То, что я хочу сделать, - это отрисовка следующей ячейки заранее.

Проблема в том, что метод cellForItemAt не вызывается после insertItems (at:).

Но когда я уменьшаю размеры ячеек, чтобы следующая ячейка была видимой, вызывается метод cellForItemAt, который отображает следующую ячейку.

Я хочу предварительно загрузить следующую ячейку без уменьшения размера ячейки. Есть ли решения?

1 Ответ

0 голосов
/ 11 февраля 2020

вы можете использовать willDisplay cell метод

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    <#code#>
}
...