PhoneGap中文网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 223|回复: 0

swift实现瀑布流

[复制链接]

87

主题

87

帖子

327

积分

中级会员

Rank: 3Rank: 3

积分
327
发表于 2017-8-24 11:19:27 | 显示全部楼层 |阅读模式
本文和大家分享的是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
  具体实现代码:
QQ截图20170409201802.png
cellfarme核心计算方法
QQ截图20170409201802.png
返回计算好的布局属性数组
QQ截图20170409201802.png
重新计算contentSize大小
  这里提供了两个数据源方法,让外界传递进来 列数 随机的cell的高度
QQ截图20170409201802.png
提供外界实现的数据源方法
  整个瀑布流的实现结束!
来源:简书

it营
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|PhoneGap中文网 ( 京ICP备13027796号-1

GMT+8, 2018-1-19 21:28 , Processed in 0.202208 second(s), 33 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表