【问题标题】: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单元格以适应其内容的帮助

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

【问题讨论】:

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

标签: ios swift uicollectionviewcell collectionview


【解决方案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://stackoverflow.com/a/53102033/7388630

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

    【讨论】:

    • 您的完整工作代码示例的链接无效,您能分享一下有效的吗?谢谢
    • 这真的很奇怪。这个对我有用。 fewlinesofcode.com/swift,/uicollectionview/2018/11/01/…
    • 感谢您的新链接,我能够下载您的代码,您的收藏视图似乎没有根据其单元格大小调整大小,您的单元格正在根据代码标签中的内容调整大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2020-11-02
    相关资源
    最近更新 更多