Eden V. Eden V. - 1 year ago 765
iOS Question

UICollectionReusableView method not being called

I want my sections in the

to have a header with an image.

I have followed these steps:

  • at the storyboard, assigned a header as an accessory for my

  • gave it an identifier

  • created a subclass of
    for it

  • assigned the custom class to the class at the storyboard.

  • put an
    at the header accessory

  • made an outlet for the
    at the custom class in the

  • Implemented the following at


[self.collectionView registerClass:[ScheduleHeaderView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headerIdentifier];

-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
UICollectionReusableView *reusableview = nil;

if (kind == UICollectionElementKindSectionHeader)
ScheduleHeaderView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headerIdentifier forIndexPath:indexPath];

headerView.headerImageView.image = [UIImage imageNamed:@"blah.png"];

reusableview = headerView;

return reusableview;

I know that the datasource and delegate methods are working because I can see all the cells and its sections. However, I don't have my headers. I put in a breakpoint at the method above and it's never being called.

What am i doing wrong?

Answer Source

It seems that you have to give your header a non-zero size or collectionView:viewForSupplementaryElementOfKind:atIndexPath isn't called. So either set the headerReferenceSize property of the flow layout like so:

flowLayout.headerReferenceSize = CGSizeMake(self.collectionView.frame.size.width, 100.f);

or, implement collectionView:layout:referenceSizeForHeaderInSection if you want to vary the size by section.