Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UICollectionView show footer only for the last section

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
    }
like image 899
Shmidt Avatar asked Dec 31 '14 17:12

Shmidt


1 Answers

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.

like image 110
matt Avatar answered Sep 27 '22 21:09

matt