iOS瀑布流

作者: Aeron_Xie | 来源:发表于2016-02-09 23:22 被阅读722次

最新研究了下iOS中瀑布流的实现方法,一般瀑布流都采用ScrollView + UITableView,或者是使用UICollectionView实现。

ScrollView + UITableView

使用这种方法实现瀑布流的话,首先底层应该是一个 UIScrollView ,然后再 UIScrollView 上面添加 UITableView ,但是这个方法有很多不太好的地方,首先这两个控件都可以单独滚动,所以需要把 UITableView 的滚动禁止了,如果有很多列的话就需要很多个 UITableView,而且还需要单独的管理每一列的东西,下标也不好计算

pbl1.png

UICollectionView

使用这个方法,对比以上方法,UICollectionView 系统帮解决了cell的重用问题,而且不需要分列管理,在计算的时候也比较方便,所以大多数的瀑布流都使用 UICollectionView

实现思路

我们需要把每一个不同高度的cell填充到里面去,而且要保持长短的平均,所以我们需要每次都把cell放到所有列中最短的那一列后边拼接,这样就可以实现长短不一了,然后再加上行跟列的间距以及边缘宽度,就可以了。

pbl1.png

实现

首先我们需要写一个自定义布局,并且继承于 UICollectionViewLayout

我们需要实现四个方法:

  • - (void)prepareLayout
  • - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
  • - (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
  • - (CGSize)collectionViewContentSize

这四个方法作用分别是

/**
*  布局准备方法 初始化会被调用一次
*  当collectionView的布局发生变化时 会被调用
*  通常是做布局的准备工作 itemSize.....
*/
- (void)prepareLayout {
    [super prepareLayout];
    ...
}
    
/**
 * 所有cell的布局属性
 */
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
    ...
}

/**
 * 返回indexPath位置cell对应的布局属性
 */
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath {
    ...
}

/**
 *  内容大小
 *
 *  @return 大小
 */
- (CGSize)collectionViewContentSize {
    ...    
}

实现这个四个方法后,一个布局就写好了

最后的效果~

pbl1.png

Demo代码在github上的地址~~

相关文章

  • iOS UICollectionView autolayout

    iOS UICollectionView autolayout UICollectionViewCell 瀑布流加...

  • 关于自定义瀑布流的布局(Swift)

    瀑布流 UICollectionView Swift 最近整理以前iOS开发中用到的功能代码,发觉对瀑布流的布局有...

  • iOS使用UICollectionView实现瀑布流

    UICollectionView实现瀑布流 在iOS中可以实现瀑布流的目前已知的有2种方案: 使用UIScroll...

  • iOS瀑布流

    说来惭愧,使用collectionView这么久了,还从来没自己写过瀑布流,废话不多说,先上效果图: 数据来源 数...

  • iOS瀑布流

    参考 http://blog.csdn.net/yi_zz32/article/details/50520136将...

  • iOS - 瀑布流

    在最近小玩一下瀑布流中发现的一个小坑如图: Demo下载:WaterFall - 瀑布流布局

  • iOS瀑布流

    瀑布流 因为iOS提供UICollectionViewLayout的布局类不能实现瀑布流的效果,所以需要自定义一个...

  • iOS 瀑布流

    下面这些是外部封装的接口: @interface LRBWaterFallLayout : UICollectio...

  • iOS瀑布流

    瀑布流Demo 使用UICollectionView实现瀑布流 自定义UICollectionViewLayout...

  • iOS 瀑布流

    1.简单认识 瀑布流,又称瀑布流式布局。是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条...

网友评论

本文标题:iOS瀑布流

本文链接:https://www.haomeiwen.com/subject/bpnykttx.html