7

How can I show footer view only for one section?

As I found out, I can't pass nil to hide footer views in other sections, as it produces crash.

override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {

        var v : UICollectionReusableView! = nil
        if kind == UICollectionElementKindSectionHeader {
            let x = collectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionHeader, withReuseIdentifier:reuseHeaderIdentifier, forIndexPath:indexPath) as HouseNameReusableView

            let h = houses[indexPath.section]        
            x.nameLabel.text = h["name"] as? String

            return x

        }else if kind == UICollectionElementKindSectionFooter {
            if indexPath.section == houses.count - 1{
            let x = collectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionFooter, withReuseIdentifier:reuseFooterIdentifier, forIndexPath:indexPath) as FooterCollectionReusableView

            return x
            }
        }
        return v
    }
Shmidt
  • 16,436
  • 18
  • 88
  • 136

1 Answers1

17

You cannot pass nil to other footer views, but you can give the other footer views zero height, which amounts to the same thing - they won't appear, because they have no height.

So implement collectionView:layout:referenceSizeForFooterInSection: to give all the footers a zero height except for the one you actually want to see.

matt
  • 515,959
  • 87
  • 875
  • 1,141