CollectionView collectionViewLayout работает во второй перезагрузке данных

У меня есть шесть UICollectionView в контроллере oneView, в зависимости от выбранного пользователем состояния, я хочу перезагрузить данные коллекций. моя коллекция просмотров должна быть горизонтальной Scroll Direction, динамический размер ячейки. Вот мой код для набора collectionViewLayout, этот код прекрасно работает во всех IPAD и IPHONE, но есть проблема с IPHONE "5" IOS 10 и более поздними версиями. при вызове первого представления коллекции reloadData ничего не показывается, а collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) не вызывает. в следующем вызове данных перезагрузки collectionView вызовите этот метод, и пользовательский интерфейс обновится успешно. в чем проблема в этих устройствах?

private func setFlowLayout() {

  let flowLayout = UICollectionViewFlowLayout()
    flowLayout.scrollDirection = UICollectionViewScrollDirection.horizontal
    flowLayout.minimumInteritemSpacing = 10.0
    flowLayout.sectionInset = UIEdgeInsets(top: 0.0, left: 5.0, bottom: 0.0, right: 5.0)
    flowLayout.estimatedItemSize = CGSize(width: 1,height: 1)
    flowLayout.estimatedItemSize = CGSize(width: 1,height: 1)
    collectionView.collectionViewLayout = flowLayout
    collectionView.collectionViewLayout.invalidateLayout()

}

1 ответ

Я выяснил, в чем проблема, это ошибка UIKit в iOS 10. сначала вызывая invalidateLayout в viewDidLayoutSubviews

override func viewDidLayoutSubviews() {
    super.viewWillLayoutSubviews()
    collectionView.collectionViewLayout.invalidateLayout()
}

И, наконец, вызов invalidateLayout после collectionView.reloadData()

Другие вопросы по тегам