问题标签 [uicollectionviewcompositionallayout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1486 浏览

ios - 试图将 Compositional Layout CollectionView 与 PageControl 连接起来。visibleItemsInvalidationHandler 没有调用

我想在 iOS 应用程序(iOS 13、swift 5.2、xcode 11.5)的欢迎屏幕上实现分页。

为此,我使用了 UICollectionView 和 UIPageControl。现在我需要将 pageControl 绑定到 Collection 视图。

起初,我尝试使用 UIScrollViewDelegate,但很快发现它不适用于组合布局。然后我发现了可用于组合布局部分的 visibleItemsInvalidationHandler。我尝试了这样的不同选项:

像这样:

但没有任何效果...

似乎该回调根本没有触发。如果我在其中放置一个打印语句,它不会被执行。

请在下面找到整个代码:

0 投票
1 回答
160 浏览

ios - UICollectionViewCompositionalLayout:自定义网格布局,其中只有一个单元格必须大于其他单元格

我正在尝试使用UICollectionViewCompositionalLayout第三张图片显示更大的地方构建照片网格,所有其他图片都应该很小。

我已经走到了这一步:

在此处输入图像描述

问题是这种布局不断重复,所以现在每六张图片中有一张显示得更大,而不是只发生在第一组。

这是我的布局代码:

我如何做到这一点,以便第一组 ( mainWithPairGroup) 只使用一次,然后tripletGroup一遍又一遍地重复?

0 投票
0 回答
131 浏览

swift - 如何删除 uicollectionview 中的 sectionHeader?

我有一个包含一组项目的部分数组。这是我用来使用组合布局填充我的集合视图的方法。我的布局总是可以根据用户而改变。他们可以删除、添加或修改部分或项目。集合视图根据数组中的节数显示节标题。sectionheader 是一个boundarySupplementaryItem。删除部分或从数组中删除所有部分时出现此错误。“由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'当集合视图中只有0个部分时,请求第1部分中补充视图UICollectionElementKindSectionHeader的布局属性'。

如果我注释掉这段代码,它不会崩溃,但节标题不会在那里

这是生成组合布局的代码,以及 didSet 上的sections 数组会发生什么。

0 投票
1 回答
949 浏览

ios - 具有水平或正交滚动行为的 UICollectionViewCompositionalLayout 在屏幕边缘附近的项目间距不一致

我的作曲布局有以下布局

然后我的 collectionView 中有 30 个“日”项。

我的 UIcollectionViewController 覆盖了屏幕的整个宽度。我在屏幕上的单元格如下所示:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

在此处输入图像描述

单元格上的文本是它们的索引路径。您可以看到 0-4、5-9 之间的间距是均匀的,然后在边缘 4-5 和 9-10 上,它是不同的。我相信这是因为它是屏幕之间的“边缘”。但我能做些什么呢?

我也尝试过不使用正交滚动行为,只设置布局配置的滚动方向

它似乎达到了同样的目的。这里有什么建议吗?

编辑:似乎这种行为是基于组的大小。例如,当我使用 let dayGroup = NSCollectionLayoutGroup.horizo​​ntal(layoutSize: dayGroupSize, subitem: dayItem, count: 30) 时,它使所有项目彼此相邻,如下所示:

在此处输入图像描述

现在有 30 个单独的项目。请注意它如何自动间隔它们之间的距离,以便它可以将 30 放入 1 个屏幕宽度。因此,它仍然试图将 1 组中的所有项目强制到一个屏幕中,这是我不想要的行为。我希望该组是整个内容大小的宽度并且可以滚动。

0 投票
1 回答
757 浏览

ios - 您如何支持通过滑动删除具有组合布局的 UICollectionView 列表中的一行?

以前使用表视图,这是在UITableViewDataSource委托回调中完成的tableView(_:commit:forRowAt:)与新集合视图相关的 API 中是否有等效功能,或者推荐的实现方式?

0 投票
0 回答
494 浏览

ios - iOS 14 UICollectionView:当部分布局从水平变为垂直时,setCollectionViewLayout 动画被破坏

我正在努力解决以下问题:我有一个带有 UICollectionViewCompositionalLayout 和两个部分的 UICollectionView。第一部分已将正交滚动行为设置为 .continues 并具有水平滚动。第二部分有垂直滚动。

当我选择一个元素时,我想将第一部分的布局从水平切换到垂直,然后从 . 布局更改应使用动画效果self.collectionView.setCollectionViewLayout(layout, animated: true)动画适用于 iOS 13 但不适用于 iOS 14(在包括 iOS 14 beta 2 在内的所有版本上测试)。

在 iOS 14 中,如果布局从水平布局更改为垂直布局,第一部分的动画将不起作用。动画被破坏/不可见并且单元格不显示。布局更改完成后,第一部分似乎是空的,并且未显示单元格。当我将集合视图滚动到底部并返回顶部时,单元格再次出现。如果第一部分的布局从垂直更改为水平,则动画也在 iOS 14 上运行,但当该部分的布局从水平更改为垂直时则不行。

知道如何解决这个问题(解决方法)或者这是 iOS 14 中的一个错误吗?

0 投票
2 回答
554 浏览

ios - UICollectionViewCompositionalLayout 项目大小不正确

我目前面临组合布局的问题,这也可以在Apple 的示例-> ConferenceNewsFeedViewController 中看到。项目高度设置为.estimated(100),宽度设置为.fractionalWidth(1.0)。在初始显示中,单元格没有包装标签内容。只有当您开始滚动时,单元格的布局才会得到纠正。有谁知道如何解决这个问题?

这是不正确的布局:

不正确的布局

这是滚动后的布局:

正确的布局

我知道它可以通过以下方式“修复”,但这感觉更像是一个肮脏的工作:

对此的任何帮助表示赞赏。

最好的,卡斯滕

0 投票
1 回答
165 浏览

ios - 如何在具有组合布局的新集合视图中将 CAGradientLayer 添加到 UIBackgroundConfiguration?

我想在具有组合布局的新集合视图的上下文中向集合视图单元格的背景添加渐变。这是一个如何从 Apple 的示例代码实现现代集合视图中的第 180 行中配置单元格背景的示例EmojiExplorerViewController

由于 newUIBackgroundConfiguration是一个结构而不是层支持的UIView子类,我不能只添加一个CAGradientLayer实例作为子层。

向单元格背景配置添加渐变的好方法是什么?

0 投票
1 回答
223 浏览

ios - 用于非网格或半网格布局的 UICollectionView

我正在尝试实现项目的多行序列(如 Final Cut Pro 或 Adob​​e Premiere pro 中的视频编辑序列,如下所示)。

虽然我总是可以使用 UIScrollView 实现它并手动放置自定义视图,但它会很乏味,特别是在重新排序项目和动画更改以及使用捏合手势在时间轴上缩放时。是否可以使用 UICollectionViewCompositionalLayout 和 UICollectionViewDiffableDataSource 使用 UICollectionView 来实现它?从 WWDC 视频来看,使用组合布局似乎几乎一切皆有可能,但尚不清楚是否可以使用它来实现时间线。也许 UICollectionView 不是这个用例的正确范例,应该使用 UIScrollView?即使我使用 UIScrollView,管理诸如拖动和重新排序项目、动画数据源更改、修剪项目、缩放内容之类的事情也会成为问题。任何指向实现这些功能的现有代码库的指针?

在此处输入图像描述

在此处输入图像描述

0 投票
1 回答
48 浏览

ios - 当 searchController 处于活动状态时,UIButton 不起作用?

我正在使用UICollectionViewCompositionalLayout带有搜索控制器的 a:

像这样

问题:

当搜索控制器处于活动状态时,我无法点击部分标题中的 UI 按钮。但是该部分的 GestureRecognizer 工作正常。

当我不搜索任何内容时,它们都可以工作,如果在搜索时点击键盘上的“输入”,按钮就会开始工作。

我做错了什么?