2

幅はさまざまだが高さは一定のセルで UICollectionView を作成しようとしています。UICollectionView には 3 つの行があり、水平方向にスクロールします。

各セルには、その右隣のセルとその下の行の間に 8px が必要です。これを IB の最小間隔として設定しました。

スクロールを垂直に設定すると、次のコードが機能し、すべてのセルが左に配置され、すべてのセル間の間隔が 8px になります。ただし、スクロールが水平のときにこのコードを使用すると、これは機能しません。

どんな方向性でも大歓迎です。

class HorizontalCollectionViewFlowLayout: UICollectionViewFlowLayout {

    override init(){
        super.init()
        scrollDirection = .horizontal
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        self.scrollDirection = .horizontal
    }

    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        let attributes = super.layoutAttributesForElements(in: rect)

        var leftMargin = sectionInset.left
        var maxY: CGFloat = -1.0
        attributes?.forEach { layoutAttribute in
            if layoutAttribute.frame.origin.y >= maxY {
                leftMargin = sectionInset.left
            }

            layoutAttribute.frame.origin.x = leftMargin

            leftMargin += layoutAttribute.frame.width + minimumInteritemSpacing
            maxY = max(layoutAttribute.frame.maxY , maxY)
        }

        return attributes
    }

}

編集:これは私が達成しようとしている UI です。

ここに画像の説明を入力

4

1 に答える 1