PhoneGap中文网
标题: swift实现瀑布流 [打印本页]
作者: w8484855@qq.com 时间: 2017-8-24 11:19
标题: swift实现瀑布流
本文和大家分享的是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的高度
提供外界实现的数据源方法
整个瀑布流的实现结束!
来源:简书
欢迎光临 PhoneGap中文网 (http://bbs.phonegap100.com/) |
Powered by Discuz! X3.2 |