2013-03-01 3 views
6

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

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

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

Заранее благодарим за вашу помощь!

ответ

19

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

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

передать его.

+0

Быстро и просто. Это еще лучший вариант, чем выбор между сгруппированными/равными в UITableView. Благодарю вас, сэр. – NSGangster

+0

Вы здорово! Потрясающие! – deepax11

9

EDIT: Как уже упоминалось в комментариях, этот ответ действителен, но не для нескольких разделов. Смотрите этот блог для лучшего решения: 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; 
} 
+0

Таким образом, установив х-начало кадра в «self.collectionView.contentOffset.x», он будет оставаться прикрепленным к боковой части рамы представления? Большое спасибо за ответ! –

+0

В этом случае это верно для оси x. Для вашего сценария вам нужно будет дублировать второй заголовок, следующий за осью y. –

+0

Это потрепанный хак, который работает только для коллекционных просмотров с заголовками только для первого раздела. –

Смежные вопросы