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()