嵌套的垂直 UICollectionView 和动态高度

时间:2021-07-07 22:54:35

标签: swift nested uicollectionview uicollectionviewcell

我有一个嵌套 2 个其他 UICollectionView 的父 UICollectionView:

  • 父 UICollectionView(垂直)

    • 第一个嵌套的 UICollectionView(水平)-灰色

    • 第二个嵌套 UICollectionView(垂直)- 红色

Parent and nested UICollectionViews

父 UICollectionView

  1. 我使用 numberOfSections(in collectionView:) 并手动设置父集合视图中的节数。在这种情况下,我 return 2;一个用于第一个(灰色)嵌套的水平 UICollectionView,一个用于第二个(红色)嵌套的垂直 UICollectionView

  2. 然后在collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int)return 1。这意味着每个嵌套的 UICollectionView 将被放置在单个项目中。

  3. 对于第一个嵌套的水平 UICollectionView 和一个特定的单元格 [参见 Nested UICollectionViews步骤 3] 用于第二个嵌套的垂直 UICollectionView。

  4. 然后我使用 collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) 设置部分中每个项目的大小。 这就是我的问题开始的地方。但是让我继续我如何设置嵌套的 UICollectionViews

嵌套的 UICollectionViews

这是每个嵌套 UICollectionView 的 3 步过程:

  1. 我创建了 UICollectionViewCell(单元格的外观)

  2. 我使用 UICollectionViewController 来:

    • 从 Firebase 获取数据
    • 使第 1 步中提到的单元出列并传入从 Firebase 获取的数据
    • 使用 collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) 设置每个项目的尺寸
  3. 我创建了另一个 UICollectionViewCell :

    • 初始化步骤 2 中提到的 UICollectionViewController

    • 使用此 UICollectionViewController 的视图并通过填充超级视图(也称为单元格)将其添加到单元格的 collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath)

      contentView

问题

当我设置水平 UICollectionView(灰色)所在部分的尺寸时,我只需要将 UICollectionView 的高度与每个单元格的高度相匹配。

vertical collection view height is equal to the cell height

但是当我设置垂直 UICollectionView 将是(红色)的部分的尺寸时,我需要知道单元格的数量来计算正确的高度。否则,该部分可能太大或太小。

enter image description here

知道如何通知父 UICollectionView 控制器垂直嵌套集合视图的单元格数量吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

对于那些嵌套行为,我建议通过代码创建 UICollectionView,而不是 IB Storyboard,这样您就不必处理太多自动调整大小约束。您可以以编程方式创建 UICollectionView(而不是带有所需 UICollectionViewControllerframe.size,然后将 UICollectionViewFlowLayout 分配给它,以便您可以更好地控制嵌套 collectionView 中的项目布局应该有多大基于其框架。一些示例代码在这里:

    lazy var layout: UICollectionViewFlowLayout = {
    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.itemSize = self.frame.size
    layout.scrollDirection = .horizontal
    layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    return layout
}()

lazy var customCollectionView: UICollectionView = {
    let collectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.width * 0.5), collectionViewLayout: self.layout)
    collectionView.backgroundColor = UIColor.clear
    collectionView.dataSource = self
    collectionView.delegate = self
    let collectionCellNib = UINib.init(nibName: "CustomCell", bundle: Bundle.main)
    collectionView.register(collectionCellNib, forCellWithReuseIdentifier: "customCellId")
    return collectionView
}()
相关问题