4

UICollectionViewDelegateFlowLayout はプロトコルであり、UICollectionViewFlowLayout はクラスであることを知っており、プロトコルとクラスの違いを知っています。私の理解では、UICollectionViewDelegateFlowLayout プロトコルに従うクラスを作成して、UICollectionViewFlowLayout からクラスを継承するのとまったく同じ効果を得ることができます。プロトコルとクラスの間の関係を見つけることで、この結論に達しました。 UICollectionViewDelegateFlowLayout ------------- UICollectionViewFlowLayout collectionView:layout:sizeForItemAtIndexPath:---- itemSize collectionView:layout:insetForSectionAtIndex:-- - sectionInset – collectionView:layout:referenceSizeForHeaderInSection: -- headerReferenceSize – collectionView:layout:referenceSizeForFooterInSection: -- footerReferenceSize

プロトコルのリファレンスで次のことも読みました。 CollectionView にレイアウト プロパティと delegateFlowLayout がある場合、delegateFlowLayout は潜在的に何かを上書きする可能性があります。言い換えれば、両方を持つことができ、プロトコルが優先されます。右?

では、同じことを行うプロトコルとクラスを発明する背後にあるロジックは何ですか?

4

1 に答える 1

7

フロー レイアウト クラスは、ほとんどではないにしても、多くの状況で機能する一種の「デフォルト」フロー レイアウトです。UICollectionViewFlowLayout で処理できないものが必要な場合は、UICollectionViewLayout をサブクラス化して追加機能を提供できます。

デリゲート メソッドは、デフォルトの UICollectionViewFlowLayout に対して、デリゲート呼び出しを介して限定的なカスタマイズを提供するだけです。

ドキュメントから、「UICollectionViewDelegateFlowLayout プロトコルは、グリッドベースのレイアウトを実装するために UICollectionViewFlowLayout オブジェクトと調整できるメソッドを定義します。このプロトコルのメソッドは、アイテムのサイズとグリッド内のアイテム間の間隔を定義します」。

彼らは同じことをしません。プロトコルは、デリゲート メソッドを使用しないフロー レイアウトではデフォルトで実行できない追加の処理を実行できるようにするために提供されています。事実上、プロトコルはより多くの「制御」を提供します。必要がない場合は、デリゲート メソッドを使用する必要はありません。

「優先順位」はありません。プロトコルはオプションです。したがって、UICollectionViewFlowLayout を使用しない場合は、プロトコルを使用しません。

于 2014-06-04T20:53:42.823 に答える