如何根据其中的内容创建具有动态高度的集合视图?

Posted

技术标签:

【中文标题】如何根据其中的内容创建具有动态高度的集合视图?【英文标题】:How to create collectionview with dynamic height as per the content in it? 【发布时间】:2019-06-05 00:17:04 【问题描述】:

源代码:My code

我需要根据不同长度的文本创建具有动态大小的布局,为此在tableview单元格中使用collectionview

我创建了自定义collectionview,其中包含自定大小的collectionview 单元格。我已经使用 CustomFlowLayout(UICollectionViewLayout 的子类)和 prepare override 方法来计算每个单元格的大小。

我能够实现动态大小的collectionview单元格,现在我需要根据它的内容大小使collectionview高度动态化,到目前为止我已经对collectionview进行了高度约束并将其设置为200固定。

需要有关如何根据其内容动态设置collectionview高度并同时调整父tableview单元格以适应其内容的帮助

下面是我想要实现的截图,非常感谢!

【问题讨论】:

如果你显示列表,那么为什么要使用集合,使用表格。或者您有任何特定的设计挑战?让我们知道。 要求是动态大小的显示列表,如果有两个小字那么应该并排放置而不是上下 你需要使用表格视图而不是集合视图。 【参考方案1】:

在 UICollectionViewLayout 的子类 CustomFlowLayout 中,您需要覆盖 collectionViewContentSize,如下所示。

计算您的内容高度并将其返回。

override public var collectionViewContentSize: CGSize 
    return CGSize(width: collectionViewWidth, height: contentHeight)

希望对你有帮助!

【讨论】:

【参考方案2】:

尝试使用

调整您的收藏视图高度
if heightConstraint.constant != collectionView.contentSize.height 
    heightConstraint.constant = collectionView.contentSize.height
    view.updateConstraintsIfNeeded()

您可以将您的 tableview 行高设置为自动。如果您的限制条件合适,tableview 单元格将自动调整其高度

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    return UITableView.automaticDimension

【讨论】:

谢谢,现在我可以调整collectionview的大小了,但是tableview单元格没有根据更新的collectionview大小进行调整,尽管tableview的大小是动态的 您的集合视图约束是否在表格视图单元格中正确设置? 是的,约束设置正确【参考方案3】:

我已经在这里回答了这个问题:https://***.com/a/53102033/7388630

您可以获得完整的工作和解释代码示例here

【讨论】:

您的完整工作代码示例的链接无效,您能分享一下有效的吗?谢谢 这真的很奇怪。这个对我有用。 fewlinesofcode.com/swift,/uicollectionview/2018/11/01/… 感谢您的新链接,我能够下载您的代码,您的收藏视图似乎没有根据其单元格大小调整大小,您的单元格正在根据代码标签中的内容调整大小。

以上是关于如何根据其中的内容创建具有动态高度的集合视图?的主要内容,如果未能解决你的问题,请参考以下文章

具有动态高度的集合视图水平方向

当项目具有动态高度时,如何根据设备方向创建动态颤动网格布局

具有动态高度的水平 CollectionView 导致 FlowLayout 警告

如何根据swift 4或5中的图像大小使图像视图高度和宽度(纵横比)动态? [关闭]

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

如何在 iOS 中创建具有动态 tableview 高度的动态 tableview 单元格