如何根据其中的内容创建具有动态高度的集合视图?
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中的图像大小使图像视图高度和宽度(纵横比)动态? [关闭]