UICollectionView плавающие заголовки сверху и сбоку

Как вы реализуете заголовки в uicollectionview? Я знаю, что вы можете добавить дополнительные представления, но я не знаю, как заставить их "плавать" над разделом, как это делают заголовки в uitableview.

Вот моя ситуация: у меня есть представление коллекции с ячейками, расположенными в виде сетки. Вы можете прокручивать по горизонтали и вертикали. Я хочу иметь верхний колонтитул, чтобы при горизонтальной прокрутке он прокручивался по горизонтали, но не по вертикали. Я также хочу то же самое на левой стороне, где оно прокручивается вертикально с видом коллекции, но не горизонтально. Является ли реализация этого с дополнительными взглядами правильным подходом?

Последняя функциональность, которую я ищу, аналогична функциональности приложения для работы с электронными таблицами Numbers на iOS.

Заранее спасибо за помощь!

2 ответа

Решение

Обновление для iOS9:

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

Передайте это вместе.

РЕДАКТИРОВАТЬ: Как уже упоминалось в комментариях, этот ответ действителен, но не для нескольких разделов. См. Этот блог для лучшего решения: http://blog.radi.ws/post/32905838158/sticky-headers-for-uicollectionview-using


Вам нужно указать это поведение в вашем макете:

- (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;
}
Другие вопросы по тегам