6

にヘッダーをどのように実装しますUICollectionViewか? 補足ビューを挿入できることは知っていますが、do のヘッダーのようにセクションの上に「浮かせる」方法がわかりませUITableViewん。

これが私の状況collectionViewです。セルがグリッド形式で配置されています。横にも縦にもスクロールできます。ヘッダーを上に配置して、水平方向にスクロールすると水平方向にスクロールするが、垂直方向にはスクロールしないようにしたい。collectionViewまた、水平方向ではなく垂直方向にスクロールする左側にも同じ種類のものが必要です。これを補足ビューで実装するのは正しいアプローチですか?

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

よろしくお願いします。

4

2 に答える 2

21

iOS9 の更新:

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

それを渡してください。

于 2016-05-16T21:09:01.380 に答える
10

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


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

- (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;
}
于 2013-03-01T15:02:16.857 に答える