UICollectionView 与两个 UICollectionViewFlowLayout

UICollectionView with two UICollectionViewFlowLayout

我正在 iOS、Swift 从事一个项目。我们如何为一个 collectionView 分配两种不同的流布局?在这里,我需要我的 UICollectionViewCell 看起来像一张堆栈卡,为此,我正在使用 CardsCollectionViewLayout(外部 pod 文件)。

myCollectionView.collectionViewLayout = CardsCollectionViewLayout()

它工作正常。但问题是我无法根据设备宽度调整 UICollectionViewCell 宽度。为此,我需要使用 UICollectionViewDelegateFlowLayout。

func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize {
    let nCol = 1
    let flowLayout = collectionViewLayout as! UICollectionViewFlowLayout
    let totalSpace = flowLayout.sectionInset.left
        + flowLayout.sectionInset.right
        + (flowLayout.minimumInteritemSpacing * CGFloat(nbCol - 1))
    let size = Int((collectionView.bounds.width - totalSpace) / CGFloat(nbCol))

    return CGSize(width: size, height: 284)
}

但是当我使用 CardsCollectionViewLayout 作为我的 collectionView 布局时,我没有在上面的方法中得到回调。

有什么方法可以用我的 UICollectionViewCell 添加堆叠卡片效果吗?

请帮帮我。

您从错误的角度看待它,如果您使用 CardsCollectionViewLayout 您必须使用该布局提供的功能才能更改它。 CardsCollectionViewLayout中有一个叫itemSize的属性,你可以设置它来定义卡片的大小:

let layout = CardsCollectionViewLayout()
collectionView.collectionViewLayout = layout
layout.itemSize = CGSize(width: YOUR_WIDTH, height: YOUR_HEIGHT)
collectionView.dataSource = self
collectionView.delegate = self
collectionView.isPagingEnabled = true
collectionView.showsHorizontalScrollIndicator = false