本文和大家分享的是swift 瀑布流的相关内容,一起来看看吧,希望对大家 学习swift有所帮助。 类似瀑布流的使用场景很多. 实现瀑布流的关键节点: 实现cell的高度不同且没有规则的展示 这里整理实现瀑布流思路是针对使用 collectionView 实现: 1. 自定义继承 UICollectionViewFlowLayout 2. 重写 prepare() 方法 3. 将重新计算的所有 UICollectionViewLayoutAttributes 通过 func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? 方法返回 4. 重新计算 contentSize 大小 产生的疑问: 1. 对于随机高度值问题: arc4random_uniform(150) +100 此处取值 100 ---- 251 2. 第二行的cell将如何选择拼接在上一行的哪个cell之下: 找出每一行中的最小高度 let minH =cellHeights.min()! a.首先初始化一个存放cell高度的数组,数组中需要存放个数 即是 列数 fileprivate lazy var cellHeights : [CGFloat] =Array(repeating:self.sectionInset.top, count:self.cols) b.在遍历cell个数循环中,要不断更新最短高度 cellHeights[minIndex] = minH +CGFloat(cellH) +minimumLineSpacing 具体实现代码: cell的farme核心计算方法 返回计算好的布局属性数组 重新计算contentSize大小 这里提供了两个数据源方法,让外界传递进来 列数 和 随机的cell的高度 提供外界实现的数据源方法 整个瀑布流的实现结束! 来源:简书
|