2012-10-03 87 views
39

私はUICollectionViewを使用していくつかのアルバムを表示するプロジェクトに取り組んでいます。項目は正常に表示されますが、最初のセクションの上にヘッダーを表示します。UICollectionViewヘッダーが表示されない

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

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

:その後

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

AlbumHeaderペン先がUICollectionViewのサブクラスであるクラスAlbumHeaderのビューを含む)

、IはcollectionView:viewForSupplementaryElementOfKind:atIndexPath方法を実施しましたそれはヘッダービューを読み込もうとするはずです。しかし、それはしません、補足的なビューのメソッドが呼び出されることはありません。

私には何が欠けていますか?何時間も立ち往生して、UICollectionViewの文書を何度も読んだことがありますが、何も助けてくれないようです。何かご意見は?

答えて

106

を、Iデフォルトでヘッダー/フッターのサイズは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; 
} 

ノートは横スクロールで、それはリターンwidthとコレクションビューの全高を使用して、返さheightとコレクションビューの全幅を使用しています。

+4

この問題に取り組んでいる人には、私がこの作業をするために、 'collectionview.footerReferenceSize'にもサイズを与える必要がありました。そのreqがiOS 7固有のものかどうかわからない... –

+1

これは信じられないほどのヒントです。百万、ありがとう! – Fattie

+1

賞金をお楽しみください! :) – Fattie

2

は、実装しました:

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

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

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

- layoutAttributesForSupplementaryViewOfKind:atIndexPath: 

はこちらをご覧ください:について尋ねyuf方法を探した後https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UICollectionViewLayout_class/Reference/Reference.html#//apple_ref/occ/cl/UICollectionViewLayout

+0

その方法はどの代議員の一部ではないようですか? –

+0

@GuidoH FlowLayoutまたはカスタムレイアウトを使用しましたか?この回答は、カスタムレイアウトを指します。 – Juguang

+0

私はフローレイアウトを使用しました。受け入れられた答えはそれをすべて解決し、意味があります。 =) –