做App的时候,有时会遇到一些比较复杂一点的页面。 用Storyboard肯定是最方便的布局办法,这个时候需要注意一下自动布局各个尺寸的屏幕问题就行。 但是如果页面需要一个后续改动或者说是动态控制的页面(当然动态的页面用Web写更好)。这个时候就给大家介绍一个框架叫做IGListKit。
IGListKit在GitHub上官方的介绍为A data-driven UICollectionView
framework for building fast and flexible lists.
一个数据驱动的UICollectionView框架,用于构建快速灵活的列表。所以这个框架的核心是在数据上,可以通过不同的数据类型灵活的展示不同的布局。这个框架是由OC写的,并且完全支持Swift,官方的实例是由Swift写成,所以此处为大家列举一个简单的OC例子,大概介绍其用法。
pod 'IGListKit'
pod导入三方库。ViewController里面的用法是
self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:[[UICollectionViewFlowLayout alloc] init]];
self.collectionView.backgroundColor = [UIColor whiteColor];
IGListAdapterUpdater *updater = [[IGListAdapterUpdater alloc] init];
_adapter = [[IGListAdapter alloc] initWithUpdater:updater viewController:self workingRangeSize:0];
_adapter.collectionView = self.collectionView;
_adapter.dataSource = self;
[self.view addSubview:self.collectionView];
其中里面IGListAdapterUpdater是数据控制协议,collectionView也是放在里面作为其属性。然后需要按照需要定义自己项目需要的数据模型。例如这样的
需要注意的时候model类都实现了IGListDiffable协议,该协议的作用是使用额外一些内存空间,降低时间复杂度到O(n),并且能准确获取所有Insert/Delete/Move操作。内部用哈希的方式实现,具体有需要了解的朋友可以在网上找到其他一些相关的介绍。协议中需要实现俩个数据Model的对比方法以判断其异同。例如Model中有数组元素,可以先判断数据个数,再循环判断数组里面的对象。
然后在需要实现的IGListAdapterDataSource协议中,返回Section的控制类。
如上图的示例中,可以通过对Model的不同状态来返回不同的控制类。以实现对不同布局逻辑的代码分离。
在sectionController控制类中实现每个cell的大小和具体内容。 cell大小也可以根据数据需求做自定义,这样就有效且灵活的实现了复杂逻辑的布局,并且分离出不同逻辑的代码。如果某一个部分需要改动也不会影响到其他的部门。
以上就是大概的用法,写的比较简单。详情可以参考Demo
***以上 项目名称T_yunIGListKit
(欢迎随手给一颗星星哦~)本篇博客Demo地址https://github.com/xmy0010/DemoForCSDN
本人邮箱18144200589@163.com欢迎小伙伴一起讨论,学习,进步。