我在 oneView Controller 中有六个 UICollectionView,取决于用户选择的状态,我想重新加载集合数据。我的收藏 View 应该是水平滚动方向,动态大小单元格。有我的 set collectionViewLayout 代码,此代码在所有 IPAD 和 IPHONE 中都可以正常工作,但 IPHONE“5”IOS 10 及更高版本存在问题。当调用第一个 Collection View reloadData 时,没有任何显示并且 collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) 不调用。在接下来的 collectionView 重新加载数据中调用此方法调用并且 UI 更新成功。 这个设备有什么问题?
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()
}
最佳答案
我想通了问题出在哪里,这是 iOS 10 中 UIKit 的一个错误。 首先在viewDidLayoutSubviews中调用invalidateLayout
override func viewDidLayoutSubviews() {
super.viewWillLayoutSubviews()
collectionView.collectionViewLayout.invalidateLayout()
}
最后在 collectionView.reloadData() 之后调用 invalidateLayout
关于ios - CollectionView collectionViewLayout 在第二次重新加载数据时工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775302/