我有一个嵌套 2 个其他 UICollectionView 的父 UICollectionView:
父 UICollectionView(垂直)
第一个嵌套的 UICollectionView(水平)-灰色
第二个嵌套 UICollectionView(垂直)- 红色
我使用 numberOfSections(in collectionView:)
并手动设置父集合视图中的节数。在这种情况下,我 return 2
;一个用于第一个(灰色)嵌套的水平 UICollectionView,一个用于第二个(红色)嵌套的垂直 UICollectionView
然后在collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int)
我return 1
。这意味着每个嵌套的 UICollectionView 将被放置在单个项目中。
对于第一个嵌套的水平 UICollectionView 和一个特定的单元格 [参见 Nested UICollectionViews步骤 3] 用于第二个嵌套的垂直 UICollectionView。
然后我使用 collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath)
设置部分中每个项目的大小。 这就是我的问题开始的地方。但是让我继续我如何设置嵌套的 UICollectionViews。
这是每个嵌套 UICollectionView 的 3 步过程:
我创建了 UICollectionViewCell(单元格的外观)
我使用 UICollectionViewController 来:
collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath)
设置每个项目的尺寸我创建了另一个 UICollectionViewCell :
初始化步骤 2 中提到的 UICollectionViewController
使用此 UICollectionViewController 的视图并通过填充超级视图(也称为单元格)将其添加到单元格的 collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath)
contentView
当我设置水平 UICollectionView(灰色)所在部分的尺寸时,我只需要将 UICollectionView 的高度与每个单元格的高度相匹配。
但是当我设置垂直 UICollectionView 将是(红色)的部分的尺寸时,我需要知道单元格的数量来计算正确的高度。否则,该部分可能太大或太小。
知道如何通知父 UICollectionView 控制器垂直嵌套集合视图的单元格数量吗?
提前致谢。
答案 0 :(得分:0)
对于那些嵌套行为,我建议通过代码创建 UICollectionView
,而不是 IB Storyboard,这样您就不必处理太多自动调整大小约束。您可以以编程方式创建 UICollectionView
(而不是带有所需 UICollectionViewController
的 frame.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
}()