UICollectionView cellForItemAt не вызывается после InsertItems(at:) – Как предварительно загрузить следующую ячейку?

Я работаю над горизонтальным 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 и визуализирует следующую ячейку.

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


person undervine    schedule 11.02.2020    source источник


Ответы (1)


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

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    <#code#>
}
person Ruchi Makadia    schedule 11.02.2020