具有动态内容的 UICollectionView(每个单元格的视图数量可变)

Posted

技术标签:

【中文标题】具有动态内容的 UICollectionView(每个单元格的视图数量可变)【英文标题】:UICollectionView with dynamic content(variable amount of views for each cell) 【发布时间】:2020-06-25 20:34:15 【问题描述】:

我想创建一个集合视图,每个单元格如下图所示:

问题是每个单元格都会有不同数量的“事件”。一个可以只有 2 个,另一个最多可以有 10 个左右。

我找不到使这成为可能的方法,主要是因为我认为我必须制作一个 UITableView,每个单元格都是一个 UICollectionView。但是如何为每个单元格设置不同的高度。而且我认为这也有点矫枉过正。

要走的路是什么?谢谢!

【问题讨论】:

【参考方案1】:

基本上你有几个选择:

创建完全自定义的布局类 - 的子级 UICollectionViewLayout (UICollectionViewFlowLayout)(你很可能不会这样做) 如果您使用 UICollectionViewFlowLayout 实现 UICollectionViewDelegateFlowLayout 协议,该协议包含调整单元格大小的方法:
func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize

并根据您在某个日期的事件数量计算单元格的高度

创建两种单元格 — 一种用于带有日期和一种事件的单元格(一天中最高),另一种用于仅事件(可能是其他一些,如分隔符或其他内容,具体取决于 UI)。两个单元格的高度都是固定的,因此使用 UICollectionViewDelegateFlowLayout 中的方法可以为单元格提供正确的大小。

p.s 在所有情况下,首先你要考虑的是——你的模型是什么,下一步是什么(例如——会有一个打开的事件动画,你可以滑动删除事件吗?您可以与每个事件进行交互吗,等等)-取决于您必须在第二个和第三个选项之间进行选择

【讨论】:

谢谢!我用了你的第三种方法。我创建了一个 UICollectionView 和两种类型的视图。第一个带有日期,另一个带有事件。并且只是根据需要添加事件或标题。当然,我的模型中的数据需要排序。

以上是关于具有动态内容的 UICollectionView(每个单元格的视图数量可变)的主要内容,如果未能解决你的问题,请参考以下文章

具有动态高度和半宽的 UICollectionview 单元格

UICollectionView 单元格在swift中使用约束固定宽度和动态高度

uicollectionview 动态高度但固定宽度

UICollectionView Header 根据其内容和边距动态大小

动态调整 UICollectionView 大小以确保没有项目间距

尝试通过使用 UICollectionViewCompositionalLayout 实现固定高度、动态宽度(包装内容)水平 UICollectionView 的单元格