利用UICollectionView做的水平滑动分页视图

一、需求:

  • 前段时间,产品经理给项目改了个需求:

之前的视图展示是简单的竖直方向上的瀑布流效果,后面要改成水平滑动分页的效果展示。

  • 改的原因:

    之所以改,主要是像以前那样能看到所有的功能模块,但是有些功能模块用户基本不用,这样用户体验不是很好,所以将用户比较少用的功能模块给放在第二页,提升用户体验。

  • 改之后的具体需求:

在页面底部有一个固定的高度区域,该区域里面有行列排放整齐的小方格子视图,方格子视图的展示有固定的顺序:该顺序是先从左往右排,首行排满后再往下一行排,该页排满后再往下一页排。

  • 效果图展示:
    第一页(效果图).png
第二页(效果图).png

二、思考怎么做:

  • **预想偏差: ** 当看到这样的效果图展示的时候,我们的第一反应可能就是直接使用UICollectionView来做,用UICollectionViewFollowLayout布局,设置横向滚动,完全就能达到我们的效果,但其实效果是这样的:
第一页(使用UICollectionViewFlowLayout布局).png
第二页(使用UICollectionViewFlowLayout布局).png
  • **偏差原因: ** 那是因为使用UICollectionViewFollowLayout的水平方向滑动布局方式是:它是每列先从上往下排,排到最后一行后。再从下一列开始继续往下排,排到最后一行...,最后从最后一列开始排到最后一行。排满当前可视化区域后,接着再往下一页这样排。所以它的这种布局方式达不到我们想要的效果。
  • **找准方向: ** 既然系统的不是我们想要的,那么这里我们可以继承UICollectionViewFollowLayout,自定义我们的布局,以达到我们想要的效果。

三、具体实现(使用自定义布局HorizontalPageFlowLayout):

1.定义所需属性(.h文件里):
  • 提供了一些可供设置的属性(列间距,行间距,UICollectionView的内边距,展示多少行,每行展示多少个方格子视图)。
  • 每一个item都有一个attributes,因此定义一个数组来保存每一个itemattributes
  • 以及在创建该布局对象时同时设置这些属性的方法声明。
  • 对应代码:
  • .h文件.png
2.重写系统的4个方法(.m文件里):
  • - (void)prepareLayout (布局前的准备工作)
  • 1.布局前的准备.png
  • - (CGSize)collectionViewContentSize (计算UICollectionView的滚动范围)
  • 2.计算collectionView的滚动范围.png
  • - (UICollectionViewLayoutAttributes * )layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath (设置每个方格子视图的属性)
  • 3.设置每个item的属性.png
  • - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect (返回所有方格子视图的属性数组)
  • 4.返回collectionView中所有的属性数组.png

四、怎么使用:

  1. HorizontalPageFlowlayout.h.m文件到你项目中,也可以直接拖HorizontalPageFlowlayout这个文件夹到你的项目中。
  2. 在你要创建UICollectionView这个对象的文件里导入头文件:#import "HorizontalPageFlowlayout.h"
  3. 然后使用HorizontalPageFlowlayout布局即可,布局的同时可以设置(列间距,行间距,UICollectionView的内边距,展示多少行,每行展示多少个方格子视图)。
    举例:
  • 具体使用.png

具体代码请到这里下载https://github.com/coderJW/HorizontalPageView,觉得不错的,star一下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 翻译自“Collection View Programming Guide for iOS” 0 关于iOS集合视...
    lakerszhy阅读 3,932评论 1 22
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,267评论 4 61
  • 很多小天使都被无良的大人们逼问过家里所有人里面最不喜欢谁?(我就曾经是其中之一),其实开始大家都一般是小天使最喜欢...
    沙栗阅读 513评论 2 1
  • 突如其来的凌晨两点半醒来,让我思绪万千!以前都是这个时间回家,当然都是酩酊大醉而归,从未发现这个时间的夜是如...
    离客阅读 509评论 0 2