如何使用 UICollectionViewCompositionalLayout 的部分提供程序跳过部分?

Posted

技术标签:

【中文标题】如何使用 UICollectionViewCompositionalLayout 的部分提供程序跳过部分?【英文标题】:How can I skip a section with UICollectionViewCompositionalLayout's section provider? 【发布时间】:2021-02-24 00:21:56 【问题描述】:

我正在使用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 会引发异常,为什么 section provider 的返回类型可以为 null?

【问题讨论】:

【参考方案1】:

在这里跳过一个部分的最佳方法是什么?

您可以返回零作为隐藏部分中的单元格数。

否则没有神奇的公式。考虑到显示的内容,您只需要减少编号即可。

例如,如果有 5 个部分,则它们是 0、1、2、3 和 4 部分。

现在假设您不希望显示第 2 部分。现在有 4 个节(节数的值已更改),它们是节 0、1、2 和 3。

不同的是,当只有4个section时,section 2的布局就像之前的section 3一样,section 3的布局就像之前的section 4一样。

【讨论】:

以上是关于如何使用 UICollectionViewCompositionalLayout 的部分提供程序跳过部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?