30

私は UICollectionView を使用しており、セクション ヘッダーと共にグローバル ヘッダーとフッターが必要です。グローバル ヘッダーとフッターの両方が、残りのコンテンツと共にスクロールすることになっています。基本的に、これらは UITableView の tableHeaderView および tableFooterView プロパティとまったく同じように機能するはずです。

ダイアグラム

私が理解していることから、補足ビューは特定のセクションの上または下にあり、装飾ビューは機能しません。グローバル ヘッダーとフッターには、インタラクティブな要素が必要です。

数時間試した後、私は本当に髪を引っ張っています。contentInsets をハッキングしたり、コレクションビューにサブビューを追加したりするなど、いくつかの厄介な方法を見つけました。私が本当に探しているのは、これを行うためのクリーンな方法です。

アドバイスをお待ちしております!

4

3 に答える 3

6

独自のカスタム コレクション ビュー レイアウトとデータソースを作成する必要があります。データソースは、グローバル ヘッダーとグローバル フッター、およびセクション ヘッダーとフッターを返します。カスタム コレクション ビュー レイアウトは、それらを適切に配置する必要があります。

これは非常に単純なプロセスではありません。

WWDC トークの Advanced User Interfaces with Collection Views では、グローバル ヘッダーの作成方法に関するサンプル コードを使用してアプローチを説明しています。サンプル コードを使用して、それにグローバル フッター セクションを追加できます。

アップル より:

コレクション ビューを備えた高度なユーザー インターフェイス

コード ファクタリング、スワイプによる編集、ドラッグによる並べ替え、および洗練されたカスタム コレクション ビュー レイアウトを示します。

于 2015-09-05T19:46:31.283 に答える
-4

cellForItemAtIndexPath デリゲート メソッドでこれを修正します。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0)
    {
        // first section
    }
else if (indexPath.section == [dataSourceSectionsArray.count]-1)
    {
        // last section
    }
else
    {
        // normal section
    }
}

もちろん、numberOfRowsInSection メソッドで [dataSourceSectionsArray.count]+2 (ヘッダー 1 つ、フッター 1 つ) を返す必要があります。また、通常の方法でデータにアクセスするときは、常に [dataSourceSectionsArray objectAtIndex:indexPath.row-1] を参照するように注意してください。配列内のヘッダーに対応するオブジェクトがないためです。

于 2013-12-12T09:13:07.730 に答える