swift UICollection使用组合布局在同一节中查看多种单元格类型

14ifxucb  于 2023-04-04  发布在  Swift
关注(0)|答案(2)|浏览(106)

我有两种类型的单元格“ProductCell”和“NoImageProductCell”。数据由API提供,因此我无法控制我将获得的产品类型(带或不带图像)。
如何使用组合布局在同一节中以不同的单元格大小显示两种类型。

3z6pesqy

3z6pesqy1#

我最终使用了NSCollectionLayoutGroup.custom,它允许您分别调整属于一个组的每个项目的大小。

let items = self.dataSource.snapshot().itemIdentifiers(inSection: 2)
                let group = NSCollectionLayoutGroup.custom(layoutSize: groupSize) { (env) -> [NSCollectionLayoutGroupCustomItem] in
                var customItems = [NSCollectionLayoutGroupCustomItem]()
                items.forEach { (object) in
                    switch object.imageURL {
                    case .none:
                        //calculate frame and append item
customItems.append(NSCollectionLayoutGroupCustomItem(frame: yourFrame))
                    case .some(_):
                        //calculate frame and append item
customItems.append(NSCollectionLayoutGroupCustomItem(frame: yourFrame))
                    }
                }
                return customItems
            }
r7s23pms

r7s23pms2#

有人在这里吗,我建议你试试

let item = NSCollectionLayoutItem(
    layoutSize: NSCollectionLayoutSize(
        widthDimension: .fractionalWidth(1),
        heightDimension: .estimated(128)
    )
)

let item2 = NSCollectionLayoutItem(
    layoutSize: NSCollectionLayoutSize(
        widthDimension: .fractionalWidth(1),
        heightDimension: .estimated(36)
    )
)

let group = NSCollectionLayoutGroup.vertical(
    layoutSize: NSCollectionLayoutSize(
        widthDimension: .fractionalWidth(1),
        heightDimension: .estimated(128)
    ),
    subitems: [item, item2]
)

我猜compos layout会自动计算item和item2的.estimated()的height并应用该计算。

相关问题