UICollectionView header not showing

前端 未结 3 1400
感动是毒
感动是毒 2021-01-31 14:21

I\'m working on a project that uses an UICollectionView to show several albums. The items show fine, but now I want to show an header above the first section.

相关标签:
3条回答
  • 2021-01-31 14:58

    Did you implement:

    - (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
    

    There's a ton of methods to implement just to make one thing work...I'm learning too. Tell me if it works.

    Edit: Sorry wrong method. That is for subclassing I think. The one I'm talking about is in UICollectionViewLayout (the layout object you subclass, if your layout supports supplementary views):

    - layoutAttributesForSupplementaryViewOfKind:atIndexPath:
    

    See here: https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UICollectionViewLayout_class/Reference/Reference.html#//apple_ref/occ/cl/UICollectionViewLayout

    0 讨论(0)
  • 2021-01-31 15:08

    After looking for the method yuf asked about, I read that by default the size of headers/footers are 0,0. If the size is 0, the header/footer won't display.

    You can set the size with a property:

    flowLayout.headerReferenceSize = CGSizeMake(0, 100);
    

    Then all the headers will have the same size. If it has to be different for each section, you can implement the following method, which is part of the UICollectionViewDelegateFlowLayout protocol.

    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
        if (section == albumSection) {
            return CGSizeMake(0, 100);
        }
    
        return CGSizeZero;
    }
    

    Note that in vertical scrolling it uses the returned height and the full width of the collection view, in horizontal scrolling it uses the return width and the full height of the collection view.

    0 讨论(0)
  • 2021-01-31 15:09

    for SWIFT 3 & SWIFT 4

        self.collectionView.register(UINib(nibName: "SectionCollectionReusableView", bundle: nil), forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "SectionCollectionReusableView")
    
    
    
        self.collectionView.fs_width = self.collectionView.bounds.width
    
        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 70, left: 40, bottom: 0, right: 0)
        layout.minimumInteritemSpacing = 0
        layout.minimumLineSpacing = 0
        layout.estimatedItemSize = CGSize(width: 350, height: 140)
        layout.scrollDirection = .horizontal
        layout.headerReferenceSize = CGSize(width: self.collectionView.bounds.size.width, height: 60)
        layout.sectionHeadersPinToVisibleBounds = true
        self.collectionView!.collectionViewLayout = layout
    

    You have to add this to ViewDidLoad, and notice the

    layout.headerReferenceSize = CGSize(width: self.collectionView.bounds.size.width, height: 60)
    

    This will make the header Section Layouts

    and Thanks @Guido Hendriks, and all I have got the insight from their answer as well

    0 讨论(0)
提交回复
热议问题