6

您如何在 a 中实现标头UICollectionView?我知道您可以放入补充视图,但我不知道如何使它们“浮动”在类似标题的部分上方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 回答