美文网首页
Swift-自定义collectionviewlayout制作日

Swift-自定义collectionviewlayout制作日

作者: 小猿仔 | 来源:发表于2017-07-31 18:12 被阅读198次

    其实自定义collectionViewlayout并没有想象中那么复杂,layout决定了collectionview的布局,无论你想要做瀑布流还是日历等等,都可以选择collectionview来布局,灵活的使用layout会让你事半功倍。


    今天来重点说一下swift里面如何来进行collectionview的自定义layout布局

    首先创建一个继承于uiconllectionviewlayout的类

    这里主要用到了三个方法  

    override func prepare() {

    super.prepare()

    }

    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {

    }

    override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {

    }

    第一个方法是在collectionbvew布局前就开始调用,主要用来写一些准备数据 ,比如每一个item的大小  item的水平间隔 垂直间隔  等等 需要什么就在这里加上

    第二个方法返回的是一个collectionview的属性数组,这里先看三,看完三之后继续这里,在这里需要一个可变数组,同样在第一个方法里面准备,它主要用来盛放第三个方法生成的UICollectionViewLayoutAttributes然后返回,这个数组里面盛放的就是collectionview所有的布局,写一个for循环,总数小于第一段的总item数,这个量的获取很简单,cellCount = self.collectionView!.numberOfItems(inSection: 0),这个方法同样可以写在第一个方法里面,拿来用即可,然后在for循环里面把第三个方法生成的属性一一拿来,let attributes = self .layoutAttributesForItem(at: NSIndexPath(item: i, section: 0) as IndexPath),把这些属性一一添加到刚刚准备的可变数组里面,然后返回即可,这样就完成了layout的自定义布局,瀑布流的写法也类似这种,继续往下看

    第三个方法返回的是一个collectionview的属性,这个UICollectionViewLayoutAttributes在swift里面其实就是一个结合体,里面有frame  3D坐标等,这里我们重点说说frame,这里是collectionview布局的核心,collectionview的显示结果全看这里的写法,比如现在我们要写日历,那么首先给定四个cgfloat:left、top、width、height,宽高已经在第一个方法里面给了,直接用就好,重点说一下left和top,日历水平有七个item,垂直方向不定,他的第一行位置有一些偏差,我们需要知道他的第一个位置在哪里,比如这个月的第一天是周五,那么他的left就是itemSize.width*5+水平每个item间距*5 这就是他的left,top是0,想必大家应该知道第二行应该如何去做了 ,完成后把生成的frame赋给一个UICollectionViewLayoutAttributes,return即可


    我们刚刚精心准备的布局一定要用上,不然就毫无意义了

    self.collectionView?.setCollectionViewLayout(layout, animated: false)

    自定义collectionview布局基本就这些了,如果对你有帮助的话,麻烦点个喜欢 ,谢谢!!

    附上OC的瀑布流排班,自己写的,swift的删掉了!!

    末尾奉上一段我个人比较喜欢的话,希望给各位有一些勉励,来自周立波的原话:

    不稳当中求稳才是真的稳。

    相关文章

      网友评论

          本文标题:Swift-自定义collectionviewlayout制作日

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