2017-04-20 8 views
-1

UICollectionViewにCollectionセルを表示する方法を知っています。しかし、私はセルを表示するためのカスタムレイアウトを使用したいと思います。IosでUICollectionViewのカスタムレイアウトを設定する方法

マイコレクションにはセルの幅が固定されている列が2つありますが、セルの高さはラベルのコンテンツサイズによって異なる場合があります。

しかし、私はそれを行う方法がわかりません。 私は

Layout Example

下図に示すように、セルのコレクションを表示したい私は、迅速にそれを実装したいと思います。

+0

まさにこの長いチュートリアルがhttps://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest –

答えて

0

この機能を使用すると、セルの高さと幅を自由に変更できます。

FUNCのcollectionView(_ collectionView:UICollectionView、レイアウトcollectionViewLayout:UICollectionViewLayout、sizeForItemAtIndexPath indexPath:IndexPath) - > CGSize {}

細胞

0
  1. UICollectionViewLayoutクラスのカスタマイズにアクセスするindexPathを使用
  2. ビューコントローラがすべてのセルの高さを計算するためのプロトコルを定義する
  3. ビューコントローラをデリゲートとして作成
  4. デリゲートメソッドでは、各セルの動的な高さを把握する必要があります。
  5. すべてのセルの高さに対してデリゲートメソッドを呼び出し、各セルのカスタムUICollectionViewLayoutAttributesインスタンスをレイアウトサブクラスで生成するオーバーライド準備関数。
  6. 再計算を避けるために、これらのUICollectionViewLayoutAttributesインスタンスを配列に格納する必要があります。 (この手順は、UICollectionViewのプリフェッチが無効な場合のみ有効です)
  7. layoutAttributesForElements関数をオーバーライドして、指定された矩形内のすべての項目のレイアウト属性を返します。
  8. いくつかの自動レイアウトを行うために、UICollectionViewLayoutAttributesインスタンスをカスタマイズしたUICollectionViewCellに適用します。
  9. UICollectionViewLayoutAttributesサブクラスのcopy関数とisEqual関数をオーバーライドします。 UICollectionViewLayoutAttributesのサブクラスは、属性のオブジェクトを内部的にコピーできるため、NSCopyingプロトコルに準拠する必要があります。サブクラスのカスタムプロパティ(ラベルの高さなど)を比較するには、isEqualを実装する必要があります。
+0

おかげで、私は応じなかったのについてです、あなたが言及し、それは私が期待していどのように見えますしかし、今問題は、特定のセルを削除する(特定の配列要素を削除してcollectionViewをリロードする)ときに、アプリケーションがクラッシュしたときに 'UICollectionViewが存在しないインデックスパスを持つセルのレイアウト属性を受け取ったようなエラーを表示するということです: {length = 2、path = 0 - 4} ' –

+0

私はこの方法で自分のアプリケーションをコーディングしています。任意のセルを削除した後、アプリはクラッシュしません。おそらく、テストのために属性キャッシュ配列を使用不可にすることができます。 – benoitcn

関連する問題