2016-02-15 13:47:31.663 PhotoBoard [92347:5235792] ***断言失败 – [UICollectionViewData layoutAttributesForItemAtIndexPath:],/ buildroot / Library / People / com.apple.xbs / Source / UIKit_Sim / UIKit-3512.30. 14 / UICollectionViewData.m:666
2016-02-15 13:47:31.666 PhotoBoard [92347:5235792] *由于未捕获的异常’NSInternalInconsistencyException’而终止应用程序,原因:’没有UICollectionViewLayoutAttributes -layoutAttributesForItemAtIndexPath实例:{length = 2,path = 0 – 0}’
*第一次抛出调用堆栈:
(
0 CoreFoundation 0x000000010d94de65 __exceptionPreprocess 165
1 libobjc.A.dylib 0x000000010f8b5deb objc_exception_throw 48
2 CoreFoundation 0x000000010d94dcca [NSException raise:format:arguments:] 106
3基础0x000000010dfbe4de – [NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] 198
4 UIKit 0x000000010ec4161c – [UICollectionViewData layoutAttributesForItemAtIndexPath:] 627
5 UIKit 0x000000010ebeee24 – [UICollectionView _setCollectionViewLayout:animated:isInteractive:completion:] 1606
6 UIKit 0x000000010ebee4db – [UICollectionView setCollectionViewLayout:] 318
在打印布局属性时,我看到一个布局属性项
layoutAttributesForItemAtIndexPath:{length = 2,path = 0 – 0}’,我在布局中看到一个条目,所以不确定为什么找不到布局属性,
属性索引路径:({length = 2,path = 0 – 0}); frame =(6 293; 298 403.695);
属性索引路径:({length = 2,path = 0 – 1}); frame =(6 293; 298 408.695);
属性索引路径:({length = 2,path = 0 – 2}); frame =(6 293; 298 418.695);
属性索引路径:({length = 2,path = 0 – 3}); frame =(6 293; 298 433.695);
属性索引路径:({length = 2,path = 0 – 4}); frame =(6 293; 298 453.695);
属性索引路径:({length = 2,path = 0 – 5}); frame =(6 293; 298 478.695);
属性索引路径:({length = 2,path = 0 – 6}); frame =(6 293; 298 508.695);
属性索引路径:({length = 2,path = 0 – 7}); frame =(6 293; 298 543.695);
属性索引路径:({length = 2,path = 0 – 8}); frame =(6 293; 298 583.695);
属性索引路径:({length = 2,path = 0 – 9}); frame =(6 293; 298 628.695);
属性索引路径:({length = 2,path = 0 – 10}); frame =(6 293; 298 678.695);
属性索引路径:({length = 2,path = 0 – 11}); frame =(6 293; 298 733.695);
属性索引路径:({length = 2,path = 0 – 12}); frame =(6 293; 298 793.695);
属性索引路径:({length = 2,path = 0 – 13}); frame =(6 293; 298 858.695);
属性索引路径:({length = 2,path = 0 – 14}); frame =(6 293; 298 928.695);
属性索引路径:({length = 2,path = 0 – 15}); frame =(6 293; 298 1003.69);
这就是我设置新自定义布局的方式,
self.collectionView!.collectionViewLayout = self.stackLayout self.stackLayout.delegate = self self.collectionView!.collectionViewLayout.invalidateLayout() self.collectionView!.setCollectionViewLayout(self.stackLayout,animated:true) self.collectionView?.reloadData()
如果我静态加载两个自定义布局它们工作正常,只有在动态更改布局时才会发生崩溃.
如果要使用多个自定义布局进行切换,则在两个自定义布局类中重写以下方法,
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect - (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
Swift示例:
override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? { return cache[indexPath.item] }
目标C的示例:
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath { return self.cache[indexPath.item]; }
快乐编码..!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。