UICollectionViewFlowLayout
の sectionHeadersPinToVisibleBounds
を true
にする。
同じく FlowLayout の headerReferenceSize
のサイズを設定する。
ストーリーボードを使わない場合、デフォルトは (0,0) なので必ず設定する。
下記はストーリーボードを使用した場合の処理
override func viewDidLoad() {
super.viewDidLoad()
// あらかじめストーリーボードで CollectionView の View セクションの Tag に 1 を設定しておく
let cv = self.view.viewWithTag(1) as! UICollectionView
// FlowLayout を取得して sectionHeadersPinToVisibleBounds を true にする
let fl = cv.collectionViewLayout as! UICollectionViewFlowLayout
fl.sectionHeadersPinToVisibleBounds = true // sectionHeadersPinToVisibleBounds は flowlayout にしかない
}
// ヘッダーのセルを生成する ヘッダーもフッターも SupplementaryElement という扱いらしい
func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
var reusableview: UICollectionReusableView? = nil
// ヘッダーの時のみ処理する
if kind == UICollectionElementKindSectionHeader {
let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionHeader, withReuseIdentifier: "header", forIndexPath: indexPath)
let lbl = UILabel(frame: CGRectMake(5,5,100,50))
lbl.text = "HEADER!"
headerView.addSubview(lbl)
reusableview = headerView
}
return reusableview!
}