質問

UICollectionViewを使用していくつかのアルバムを表示するプロジェクトに取り組んでいます。アイテムは元気に表示されますが、今、私は最初のセクションの上にヘッダーを見せたいです。

これを行うには、registerNib:forSupplementaryViewOfKind:withReuseIdentifier:をinitメソッドに追加しました。このように:

[self.collectionView registerNib:[UINib nibWithNibName:@"AlbumHeader" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:kAlbumHeaderIdentifier];
.

AlbumHeader NIBには、AlbumHeaderのサブクラスであるClass UICollectionViewのビューが含まれています。)

その後、collectionView:viewForSupplementaryElementOfKind:atIndexPathメソッドを実装しました:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
    return [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:kAlbumHeaderIdentifier forIndexPath:indexPath];
}
.

ヘッダービューをロードしようとするはずです。しかし、補足ビューの方法は呼び出されません。

私は何を見逃していますか?何時間も停止し、UICollectionViewsに関するドキュメントを何度も読んでいますが、何も役に立ちません。考えられる?

役に立ちましたか?

解決

メソッドYUFを尋ねられた後、デフォルトでは、ヘッダー/フッターのサイズが0,0です。サイズが0の場合、ヘッダー/フッターは表示されません。

プロパティでサイズを設定できます。

flowLayout.headerReferenceSize = CGSizeMake(0, 100);
.

その後、すべてのヘッダーは同じサイズを持ちます。各セクションごとに異なる必要がある場合は、UICollectionViewDelegateFlowLayoutプロトコルの一部である次の方法を実装できます。

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
    if (section == albumSection) {
        return CGSizeMake(0, 100);
    }

    return CGSizeZero;
}
.

垂直スクロールでは、返されたheightと収集ビューの全幅を使用しています。

他のヒント

実装しましたか:

- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
.

1つのことを作るためだけに実装するためのトンの方法があります...私も学んでいます。それがうまくいくかどうか教えてください。

編集:申し訳ありませんが間違った方法。それは私が思うサブクラス化のためです。私が話しているものはUICollectionViewLayout(あなたのレイアウトが補足ビューをサポートしている場合は、サブクラスのレイアウトオブジェクト)にあります。

- layoutAttributesForSupplementaryViewOfKind:atIndexPath:
.

ここで参照: https://developer.apple.com/library/ios/#documentation/uikit/Reference/uicollectionViewLayout_class/Reference/Reference.html#//apple_ref/occ/cl/uicollectionViewLayout

swift 3&swift 4

    self.collectionView.register(UINib(nibName: "SectionCollectionReusableView", bundle: nil), forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "SectionCollectionReusableView")



    self.collectionView.fs_width = self.collectionView.bounds.width

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 70, left: 40, bottom: 0, right: 0)
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    layout.estimatedItemSize = CGSize(width: 350, height: 140)
    layout.scrollDirection = .horizontal
    layout.headerReferenceSize = CGSize(width: self.collectionView.bounds.size.width, height: 60)
    layout.sectionHeadersPinToVisibleBounds = true
    self.collectionView!.collectionViewLayout = layout
.

これを viewdidload に追加する必要があり、

に注意してください。
layout.headerReferenceSize = CGSize(width: self.collectionView.bounds.size.width, height: 60)
.

ヘッダーセクションがレイアウト

になるようになります。

と@Guido Hendriks、そして私が答えからの洞察を得たのは

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top