add custom header to collection view swift

前端 未结 2 1637
深忆病人
深忆病人 2021-01-01 20:16

I am trying to add header to collectionView using custom xib file. I created the xib file with class implementing UICollectionReusableView

相关标签:
2条回答
  • 2021-01-01 20:32

    You need to call viewForSupplementaryElementOfKind like this:

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    
        switch kind {
        case UICollectionElementKindSectionHeader:
               let reusableview = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "HCollectionReusableView", for: indexPath) as! HCollectionReusableView
    
                reusableview.frame = CGRect(0 , 0, self.view.frame.width, headerHight)
             //do other header related calls or settups
                return reusableview
    
    
        default:  fatalError("Unexpected element kind")
        }
    }
    

    This way you can initialise and show the header

    Another way of setting the UICollectionViewHeader frame is by extending UICollectionViewDelegateFlowLayout like this:

    extension UIViewController: UICollectionViewDelegateFlowLayout {
        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
            return CGSize(width: collectionView.frame.width, height: 100) //add your height here
        }
    }
    

    This removes the need to call :

    reusableview.frame = CGRect(0 , 0, self.view.frame.width, headerHight)
    

    in the above mentioned

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
    

    Remember to register the HeaderView after you initialise your UICollectionView by calling:

    collectionView.register(UINib(nibName: HCollectionReusableView.nibName, bundle: nil), forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "HCollectionReusableView")
    

    Swift 4.1 Update

    UICollectionElementKindSectionHeader has been renamed to UICollectionView.elementKindSectionHeader

    0 讨论(0)
  • 2021-01-01 20:44

    Did you set File' Owner setting in your xib File? Change file owner to your View controller hosting collectionView.

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