16

文書化されたアドバイスは、 「グリッドや線ベースの分割レイアウトなど」を行う場合はUICollectionViewフローレイアウトを使用することです。しかし、これが私の場合に当てはまるかどうかはわかりません。

グリッドが必要ですが、改行レイアウトは必要ありません。アイテムは、積み重ねることなく、水平方向と垂直方向の両方に無限に配置する必要があります。基本的に、コンテンツがフレームを超えた場合に水平または垂直にスクロールする巨大なチェス盤。

UICollectionView Flow Layoutをサブクラス化するには、次のことを行う必要があります。

  1. prepareLayoutレイアウトがアイテムをラップしないようにオーバーライドします。これは大変な作業のようです。
  2. オーバーライドしcollectionViewContentSizeます。

Appleは、UICollectionView Flow Layoutの作成で「多くのハードワーク」を行ったと言っているので、可能であればそれを活用する必要があります。prepareLayoutしかし、改行をオフにするためにオーバーライドする必要がある場合、私は彼らの仕事の大部分を捨てているのではないかと思います。残っている彼らの仕事のうち、私はおそらくそれのほとんどをとにかく使用しないでしょう(例えばminimumLineSpacingForSectionAtIndex)。

必要なレイアウトは非常に単純なので、代わりにUICollectionViewLayoutをサブクラス化する必要があると思います。理由は次のとおりです。

  1. サブクラスとデリゲートの間に分散するのではなく、すべてを1つのレイアウトクラスにまとめた、よりシンプルでクリーンな実装を実現します。
  2. どちらの場合もオーバーライドする必要があるため、 UICollectionView Flow Layoutをサブクラス化するよりもそれほど難しいことではないと思います。これがprepareLayout、すべての大変な作業になると思います。
  3. UICollectionView Flow Layoutサブクラスの上に別のクラッジを追加しようとするよりも、カスタムの方法で他のUICollectionViewLayoutAttributesを微調整するのに適した立場になります。

私の結論は正しいですか?

4

2 に答える 2

12

UICollectionViewFlowLayoutは、とにかく2つの方向をサポートできません。水平または垂直に、1つの軸に沿ってのみスクロールします。したがって、 UICollectionViewFlowLayoutではなくUICollectionViewLayoutをサブクラス化する必要があります。

次に、正しく言ったように、 prepareForLayoutlayoutsAttributesForElementsInRect メソッドをオーバーライドする必要があります。

于 2013-01-22T18:27:05.753 に答える
0

あなたが説明するレイアウト(無限に長い水平線に配置されたアイテムと無限に長い垂直線に配置されたセクション)は、AppStoreの「注目の」セクションに似ています:)

一部のアプリでも同様の概念を使用するつもりでしたが、ここでの秘訣は、単一のアプリでは処理されないことだと思いますUICollectionView。をベースとして使用することで、探しているものを実現できるようUITableViewです。コンテンツの各セクションで、テーブル内の1つのセルを使用します。つまり、それぞれに水平スクロール付きUITableViewCellのが含まれます。UICollectionView

その主な制限はUICollectionView、理解するのが簡単ではない場合があります。結局のところ、それは単一のscrollViewです。一部の機能をオーバーライドして両方向のスクロールを有効にすることができますが、一部のコンテンツを一方向にスクロールし、一部のコンテンツを別の方向にスクロールする場合は、ネストされたを作成する必要がありますscrollView

于 2014-02-07T22:04:26.993 に答える