UICollectionViewFlowLayout の指定

UICollectionViewを使用していて、アイテムのの個々の大きさとマージンをしている際に

2つほど方法があったので、メモしておきます。

delegateで指定するパターン


UICollectionViewDelegateFlowLayoutというプロトコルが用意されているので、
collection viewが使われている部分で実装してやれば良いです。

public protocol UICollectionViewDelegateFlowLayout : UICollectionViewDelegate {
    
    @available(iOS 6.0, *)
    optional public func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
    @available(iOS 6.0, *)
    optional public func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets
    @available(iOS 6.0, *)
    optional public func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat
    @available(iOS 6.0, *)
    optional public func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat
    @available(iOS 6.0, *)
    optional public func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize
    @available(iOS 6.0, *)
    optional public func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize
}




使うときはこんな感じ。

public func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    return CGSize(width: 100, height: 100)
}



collectionViewLayoutを指定するパターン


minimumLineSpacing, minimumInteritemSpacingも指定でき、
上記のdelegateと同等の指定が できます。

viewDidLoadあたりに

let layout = UICollectionViewFlowLayout()
layout.itemSize = CGSize(width: 100, height: 100)
collectionView!.collectionViewLayout = layout



delegateも使う必要がないので、 複数指定する必要があれば、

こっちの方が見易い印象です。

comments powered by Disqus