文書化されたアドバイスは、 「グリッドや線ベースの分割レイアウトなど」を行う場合はUICollectionViewフローレイアウトを使用することです。しかし、これが私の場合に当てはまるかどうかはわかりません。
グリッドが必要ですが、改行レイアウトは必要ありません。アイテムは、積み重ねることなく、水平方向と垂直方向の両方に無限に配置する必要があります。基本的に、コンテンツがフレームを超えた場合に水平または垂直にスクロールする巨大なチェス盤。
UICollectionView Flow Layoutをサブクラス化するには、次のことを行う必要があります。
prepareLayout
レイアウトがアイテムをラップしないようにオーバーライドします。これは大変な作業のようです。- オーバーライドし
collectionViewContentSize
ます。
Appleは、UICollectionView Flow Layoutの作成で「多くのハードワーク」を行ったと言っているので、可能であればそれを活用する必要があります。prepareLayout
しかし、改行をオフにするためにオーバーライドする必要がある場合、私は彼らの仕事の大部分を捨てているのではないかと思います。残っている彼らの仕事のうち、私はおそらくそれのほとんどをとにかく使用しないでしょう(例えばminimumLineSpacingForSectionAtIndex
)。
必要なレイアウトは非常に単純なので、代わりにUICollectionViewLayoutをサブクラス化する必要があると思います。理由は次のとおりです。
- サブクラスとデリゲートの間に分散するのではなく、すべてを1つのレイアウトクラスにまとめた、よりシンプルでクリーンな実装を実現します。
- どちらの場合もオーバーライドする必要があるため、 UICollectionView Flow Layoutをサブクラス化するよりもそれほど難しいことではないと思います。これが
prepareLayout
、すべての大変な作業になると思います。 - UICollectionView Flow Layoutサブクラスの上に別のクラッジを追加しようとするよりも、カスタムの方法で他のUICollectionViewLayoutAttributesを微調整するのに適した立場になります。
私の結論は正しいですか?