标准的UICollectionView布局,只能实现网格式的展现形式。如果要实现瀑布流,或者Apple Pay银行卡类似的布局,就需要自定义layout。
Layout类
UICollectionViewLayout 抽象类,不能直接使用。
UICollectionViewFlowLayout 具体类,是UICollectionViewLayout的子类,实现了基本的网格布局功能,可以直接设置行间距、列间距等,可满足一般情况下的layout需求。
自定义Layout
需自定义UICollectionViewLayout的子类,并实现以下方法:
prepare() 布局之前的准备工作。
collectionViewContentSize() 计算出contentSize。
layoutAttributesForElements(in rect: CGRect) 返回layoutAttributes对象的数组,用于显示每个item的layout。
targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) 定义collectionView停止滑动时,应该停留的位置offset信息(例如将当前item居中)。