2013-03-01 10 views
6

uicollectionviewでヘッダーを実装するにはどうすればよいですか?私はあなたが補足的な意見に入れることができることを知っていますが、私はそれらをuitableviewのヘッダーのようなセクションの上に "浮かせる"方法を知らない。UICollectionViewフローティングヘッダーの上端と下端

私の状況は次のとおりです。セルをグリッド形式でレイアウトしたコレクションビューがあります。水平方向と垂直方向にスクロールすることができます。私は水平にスクロールすると水平方向にスクロールするが、垂直方向にはスクロールしないように、上にヘッダーを付ける必要があります。私はまた、左側に同じ種類のものを、コレクションビューでは垂直にスクロールするが水平にはしたくない。これを補足的な見解で正しい方法で実施していますか?

私が探している最終的な機能は、iOS上のNumbersスプレッドシートアプリの機能と似ています。

ご協力いただきありがとうございます。

答えて

19

アップデート:

let flow = collectionView.collectionViewLayout as! UICollectionViewFlowLayout 
flow.sectionHeadersPinToVisibleBounds = true 

それを一緒に渡します。

+0

すばやく簡単です。これは、UITableViewのグループ化/プレーン化のいずれかを選択するよりも、さらに優れた選択肢です。ありがとうございます。 – NSGangster

+0

あなたは素晴らしいです!驚くばかり! – deepax11

9

編集:コメントに記載されているとおり、この回答は有効ですが、複数のセクションでは有効ではありません。よりよい解決策のために、このブログを参照してください:http://blog.radi.ws/post/32905838158/sticky-headers-for-uicollectionview-using#notes


あなたのレイアウトでその動作を指定する必要があります。iOS9ため

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 
{ 
    NSMutableArray* attributesArray = [[super layoutAttributesForElementsInRect:rect] mutableCopy]; 

    BOOL headerVisible = NO; 

    for (UICollectionViewLayoutAttributes *attributes in attributesArray) { 
    if ([attributes.representedElementKind isEqualToString:UICollectionElementKindSectionHeader]) { 
     headerVisible = YES; 
     attributes.frame = CGRectMake(self.collectionView.contentOffset.x, 0, self.headerReferenceSize.width, self.headerReferenceSize.height); 
     attributes.alpha = HEADER_ALPHA; 
     attributes.zIndex = 2; 
    } 
    } 

    if (!headerVisible) { 
    UICollectionViewLayoutAttributes *attributes = [self layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader 
                         atIndexPath:[NSIndexPath 
                            indexPathForItem:0 
                            inSection:0]]; 
    [attributesArray addObject:attributes]; 
    } 

    return attributesArray; 
} 
+0

したがって、フレームのx原点を「self.collectionView.contentOffset.x」に設定すると、ビューのフレームのサイドにアタッチされたままになります。答えてくれてありがとう! –

+0

この場合、これはx軸に適しています。あなたのシナリオでは、y軸の後に続く2番目のヘッダーを複製する必要があります。 –

+0

これは、最初のセクションのみのヘッダーを含むコレクションビューでのみ機能する、ひどいハックです。 –

関連する問題