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
  具体实现代码:
cellfarme核心计算方法
返回计算好的布局属性数组
重新计算contentSize大小
  这里提供了两个数据源方法,让外界传递进来 列数 随机的cell的高度
提供外界实现的数据源方法
  整个瀑布流的实现结束!
来源:简书






欢迎光临 PhoneGap中文网 (http://bbs.phonegap100.com/) Powered by Discuz! X3.2