UICollectionView вызывает `sizeForItem` для всех ячеек раньше времени? - PullRequest
0 голосов
/ 11 октября 2018

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

public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        print("sizeForItem\(Date())")
        let height = collectionView.frame.height
        guard tickerItems.count > 0 else {
            return CGSize(width: 500, height: 250)
        }

        let tickerCell = collectionView.cellForItem(at: indexPath) as? TickerCell ?? TickerCell()
        let tickerItem = tickerItems[indexPath.row % tickerItems.count]
        let width = tickerCell.width(for: tickerItem)
        return CGSize(width: width, height: height)
    }

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

 public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return tickerItems.count > 0 ? 100000 : 0

    }

Даже если я отключу таймер, который управляет автоматической прокруткой, у меня все еще остается та же проблема. collectionView вычисляет размеры для каждого отдельного индекса, даже если этот индекс не отображается в течение длительного времени. т.е. он будет буквально вычислять индексы размеров 100 000, прежде чем окончательно разблокировать пользовательский интерфейс, загружающий collectionView.

1 Ответ

0 голосов
/ 11 октября 2018

Представление коллекции должно знать, насколько большим оно будет, поэтому ему нужно получить размер всех ячеек.Представление коллекции является представлением прокрутки.Ему нужно знать размер контента, и он может определить это, только спросив вас, насколько велики все его ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...