cma*_*era 63 ios uicollectionview uicollectionviewlayout ios10
在iOS 10的设备上运行我的应用程序我收到此错误:
UICollectionView接收具有不存在的索引路径的单元格的布局属性
在iOS 8和9中工作正常.我一直在研究,我发现这与集合视图布局无效有关.我试图实施该解决方案但没有成功,所以我想请求直接帮助.这是我的层次结构视图:
->Table view
->Each cell of table is a custom collection view [GitHub Repo][1]
->Each item of collection view has another collection view
Run Code Online (Sandbox Code Playgroud)
我试过的是插入
[self.collectionView.collectionViewLayout invalidateLayout];
Run Code Online (Sandbox Code Playgroud)
在里面
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
Run Code Online (Sandbox Code Playgroud)
两个集合视图.
我也尝试在重新加载数据之前使布局无效,不起作用......
有人能给我一些指示吗?
小智 131
当collectionView中的单元格数量发生变化时,就会发生这种情况.原来我在调用reloadData后缺少invalidateLayout.添加后,我没有遇到任何更多的崩溃.Apple已经对iOS10中的collectionView进行了一些修改.我猜这就是我们在旧版本上没有遇到同样问题的原因.
这是我的最终代码:
[self.collectionView reloadData];
[self.collectionView.collectionViewLayout invalidateLayout];
Run Code Online (Sandbox Code Playgroud)
Art*_*urC 45
当您有自定义布局时,请记住在覆盖prepare func时清除缓存(UICollectionViewLayoutAttributes)
override func prepare() {
super.prepare()
cache.removeAll()
}
Run Code Online (Sandbox Code Playgroud)
Axi*_*mem 18
我也在同一个视图中遇到了2个collectionViews的问题,因为我在两个集合中都添加了相同的UICollectionViewFlowLayout:
let layout = UICollectionViewFlowLayout()
collectionView1.collectionViewLayout = layout
collectionView2.collectionViewLayout = layout
Run Code Online (Sandbox Code Playgroud)
当然,如果collectionView1数据发生变化,它会在重载数据时崩溃.如果这可以帮助某人.
先前的答案会有所帮助,但是如果您使用自动调整大小的单元格,则其大小将不正确。
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.estimatedItemSize = CGSizeMake(60, 25);
layout.itemSize = UICollectionViewFlowLayoutAutomaticSize;
self.collectionView.collectionViewLayout = layout;
Run Code Online (Sandbox Code Playgroud)
我通过替换来解决此问题
[self.collectionView reloadData];
Run Code Online (Sandbox Code Playgroud)
至
[self.collectionView reloadSections:indexSet];
Run Code Online (Sandbox Code Playgroud)
@Katrin的回答很有帮助,但是我可以通过增加一行来获得更好的结果:
collectionView.reloadData()
collectionView.collectionViewLayout.invalidateLayout()
collectionView.layoutSubviews() // <-- here it is :)
Run Code Online (Sandbox Code Playgroud)
我现在不能说是否可以用此行重现崩溃,但我想那是一个...所以,仍然不是灵丹妙药,而是某些东西。
| 归档时间: |
|
| 查看次数: |
24361 次 |
| 最近记录: |