UICollectionView Floating Headers on Top and Side UICollectionView Floating Headers on Top and Side xcode xcode

UICollectionView Floating Headers on Top and Side


Update for iOS9:

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

Pass it along.


EDIT: As mentioned in the comments, this answer is valid, but not for multiple sections. See this blog for a better solution: http://blog.radi.ws/post/32905838158/sticky-headers-for-uicollectionview-using#notes


You need to specify that behaviour in your layout:

- (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;}