美文网首页iOS收藏瀑布流瀑布流
自定义UICollectionViewLayout到瀑布流

自定义UICollectionViewLayout到瀑布流

作者: 焚琴煮鹤de我 | 来源:发表于2015-06-20 23:38 被阅读2679次

collectionViewLayout是个很强大的控件,有了它不仅能帮助我们快捷而准确的解决9宫格布局的问题,更是能解决很多特殊布局的难点.比如,瀑布流:

collectionView的创建需要一个layout属性

一般来说我们都是直接使用一个UICollectionViewFlowLayout的布局方式,也就是流水布局,来放置我们的collectionView

但是,为了达到瀑布流的效果,我们就需要根据服务器提供的数据,来重写布局.

创建一个我们自己的布局

这个布局继承自UICollcetionViewLayout

我们需要重写这个类的一些方法.并提供一些外部能自定义的属性

考虑到瀑布流cell和整体的设置需求,留给外部的接口 init方法中去设定一些基本的属性的默认值 这个方法的设定是为了保证只要布局重新计算,我们就刷新layout里面的attributes 用一个字典来存储每一列最大的Y值,用一个可变数组来存放界面中所有cell的attributes 貌似还有可以改善的地方,就是此时只去遍历屏幕中能看见的cell,而不是去遍历整个collectionview中所有cell 这个就是去计算瀑布流的布局了.

首先是遍历了字典中所有的maxY来计算最小的那个Y

然后返回这个最短Y的那个cell的attrs,其中的代理方法是为了得到和服务器提供数据比例一致的宽高比.

这个方法需要返回所有的在attrs,但是每次重新布局时prepareLayout就已经计算好了,就不需要我们再次计算了

最后就是要设定下这个collectionView的contentSize了,应该是最大的cellY加上我们所设置的sectionInset的bottom值了

这样就能够得到一个自定义的瀑布流的布局了

只需要将自己的模型属性放到自定义的cell中,然后创建时直接调用这个布局,就能有瀑布流的效果了.这个方法确实要比以前自定义scrollView的思路简单很多了,而且不需要自己去考虑缓存和datasource方法,使得布局简单了很多.

相关文章

网友评论

  • 9d426ee34834:我也是继承UICollectionViewLayout 我现在需要头部视图 怎么办呢?
  • DamonLu:楼主,可以提供demo供学习一下吗?谢谢啦
  • 琪一可:只能用xib写自定义的cell吗 那怎么写自定义的cell
    琪一可:@焚琴煮鹤de我 好的。。谢谢 :flushed:
    焚琴煮鹤de我:@琪一可 ....这里没用到xib.....
  • 无神:谢谢,我懂了,我会写代码试试的,非常感谢!

本文标题:自定义UICollectionViewLayout到瀑布流

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