23

UICollectionView に 2 つのヘッダーがありますか?

ヘッダーとフッターもあるフロー レイアウトを使用する UICollectionView があります。

---------   
| head  |
---------
| A | B |
---------
| C | D |
---------
| foot  |
---------

ときどき、次のように 2 つのヘッダーが必要になることがあります。

---------   
| head1 |
---------   
| head2 |
---------
| A | B |
---------
| C | D |
---------
| foot  |
---------

私はこれを達成する方法にこだわっています。フロー レイアウトは、1 つの頭と 1 つの足のみを許可するように見えます。2 番目のヘッダーを追加するにはどうすればよいですか?


編集:スティッキーヘッダーも実装しました-http://blog.radi.ws/post/32905838158/sticky-headers-for-uicollectionview-using-しかし、最初のヘッダーだけをスティッキーにしたいです。これが、すべてを 1 つのヘッダーに含めることができない理由です。

4

7 に答える 7

35

すべてのセクションでヘッダーとフッターの両方を表示するという簡単なトリックを使用するだけです。

フッターを表示したくないセクションでは、サイズゼロを次のように渡します:--

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
{
    if(section==0)
    {
        return CGSizeZero;
    }

    return CGSizeMake(320, 50);
}

ここでは、次のような 2 つのセクションを使用しました。

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 2;
}

そして、最後のセクションである1つのセクションのみに行の数を渡しませんでした

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    if (section==1) {
        return 20;
    }
    return 0;
}

そして、これが私の出力です---

ここに画像の説明を入力

赤のビューがヘッダーで、緑のビューがフッターです。

ここで、実装ファイル全体を取得できます

于 2013-08-13T12:10:29.913 に答える
5

このコンテンツは、あなたが望むものを達成するのに役立つかもしれません

クラスCollectionHeaderViewを作成し、それを派生さUICollectionReusableViewせてコンテナを作成し、次に2つのuiviewを作成してこのコンテナに配置します

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
    UICollectionReusableView *reusableview = nil;

    if (kind == UICollectionElementKindSectionHeader) {
        CollectionHeaderView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath];

        headerView.firstContainer.titleLabel.text = @"MY Header View 1";//Here you can set title 

        headerView.secondContainer.titleLabel.text = @"MY Header View 2";//Here you can set title  
        UIImage *headerImage = [UIImage imageNamed:@"header_banner.png"];
        headerView.firstContainer.backgroundImage.image = headerImage;
       headerView.secondContainer.backgroundImage.image = headerImage;

        reusableview = headerView;
    }

    if (kind == UICollectionElementKindSectionFooter) {
        UICollectionReusableView *footerview = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"FooterView" forIndexPath:indexPath];

        reusableview = footerview;
    }

    return reusableview;
}
于 2013-08-09T10:01:39.813 に答える
4

両方のヘッダー (1 と 2) を別のビューに配置し、そのビューをヘッド 1 として配置する必要があります。したがって、コレクション ビューでヘッダーのみを作成します。

于 2013-08-09T09:48:30.600 に答える
2

どのように 1 つのヘッダーを追加していますか? セクションヘッダーを指定することでしょうか?2 つのヘッダーを持つレシピは、1 つのヘッダー メイン ビュー内に 2 つのヘッダー サブビューを持つことです。

于 2013-08-09T09:48:38.960 に答える
0

再利用可能なヘッダーに 2 つのビューを作成することでこれが機能し、セクションが 2 番目のセクションである場合にのみスティッキー ヘッダーを実装します。また、numberOfSection を 2 に調整します。

于 2014-12-04T08:21:40.247 に答える