问题描述
我正在使用 UICollectionViewCompositionalLayout 在我的应用程序中构建一个新屏幕。我每个部分都有不同的布局,所以我使用了 section provider initializer。
我希望能够根据传递给提供者的布局环境隐藏和显示某些部分。我以某种方式认为我可以通过简单地返回一个 nil
部分来做到这一点 - 返回类型可以为空 - 但是当我返回一个 nil 部分时,我得到一个异常:
*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效的节定义。当要为某个部分呈现内容时,请指定有效的部分定义。这是客户端错误。'
以未捕获的 NSException 类型异常终止 CoreSimulator 757.3 - 设备:iPhone 12 Pro (C26C7431-8081-43CB-8E77-F79C8B8B3924) - 运行时:iOS 14.4 (18D46) - 设备类型:iPhone 12 Pro
在这里跳过某个部分的最佳方法是什么?如果返回 null 会引发异常,为什么部分提供程序的返回类型可以为 null?
解决方法
在这里跳过某个部分的最佳方法是什么?
您可以返回零作为隐藏部分中的单元格数。
否则没有神奇的公式。考虑到显示的内容,您只需要减少编号即可。
例如,如果有 5 个部分,则它们是部分 0、1、2、3 和 4。
现在假设您不想显示第 2 部分。现在有 4 个部分(部分数量的值已更改),它们是部分 0、1、2 和 3。
区别在于,当只有 4 个部分时,第 2 部分的布局与之前第 3 部分的布局相同,而第 3 部分的布局与之前第 4 部分的布局相同。