Swift - 无法动态更改UICollectionViewFlowLayout

时间:2016-07-28 22:10:03

标签: ios swift uicollectionview uicollectionviewlayout

viewDidLoad我为collectionViewLayout设置UICollectionViewCellUILabel说"加载内容...",当应用获取时来自服务器的内容,它执行以下操作:

let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
...
// some configuration for the layout

// here it crash:
collectionView.setCollectionViewLayout(layout, animated: true)

说出这条消息就崩溃了:

  

*由于未捕获的异常终止应用' NSRangeException',原因:' * - [__ NSArrayM objectAtIndex:]:索引0超出空数组的范围'   ***第一次抛出调用堆栈:   (0x24479b0b 0x23c36dff 0x2438a6d3 0x29275999 0x29271d13 0x29272aaf 0x28be537f 0x28be4667 0x1778dc 0x165f48 0x1661b8 0x16e774 0x16f038 0xf950c 0xf9174 0xdefb0 0xe1934 0xdf98c 0x52ed78 0x52d700 0x52bfc8 0x4df9c0 0x1531ba7 0x1531b93 0x1536659 0x2443b755 0x24439c4f 0x243881c9 0x24387fbd 0x259a4af9 0x28ac0435 0x131254 0x24034873)   libc ++ abi.dylib:以NSException类型的未捕获异常终止

我所做的事情是设置一个collectionViewLayout替换另一个。

我试图通过invalidateLayout()重新加载布局无效,或者之前没有重新加载collectionView来替换collectionViewLayout并且它仍然会崩溃。

如何动态更改collectionViewLayout?或者我做错了什么?

由于

1 个答案:

答案 0 :(得分:5)

对于iOS9和iOS8,我遇到了同样的问题。

就我而言,请在collectionView.layoutIfNeeded()之后致电collectionView.collectionViewLayout.invalidateLayout()解决问题。