文档章节

UICollection要点

d
 dadage456
发布于 2017/01/17 10:54
字数 544
阅读 1
收藏 0

## 一、UICollectionView 要点

* `UICollectionLayout`布局方法的执行顺序
* `UICollectionLayout`实现自定义布局要点
* `UICollectionViewLayoutAttributes`实现自定义布局属性要点
* 重新计算布局属性
* 自动对齐到网格

### 1、UICollectionView 构成

* Cells
* Supplementary Views 追加视图(类似Header 或则 Footer)
* Decoration Views 装饰视图(用作背景展示)


### 2、布局方法的执行顺序

1. `prepareLayout() `
2. `-(CGSize)collectionViewContentSize`
3. `-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect`


### 3、自定义UICollectionLayout实现自定义布局
> 主要继承`UICollectionLayout`以下方法,实现布局自定义。  

* `-(void)prepareLayout`
    > 开始布局前,调用的方法。可以用来一次把所有的布局属性放到一个NSArray中。

* `-(CGSize)collectionViewContentSize`
    > 返回CollectionView的内容尺寸

* `-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect`
    > 1. 返回rect中的所有元素的布局属性  
    > 2. 返回的是包含`UICollectionViewLayoutAttributes`的NSArray  
    > 3. `UICollectionViewLayoutAttributes`可以是`Cell`、`追加视图`、`装饰视图`    
    > 4. 不要返回所有的属性,只显示Rect相交的属性。节省性能。

* `-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds`
    > YES : 边界发生变化,刷新布局。  
    > 不要直接返回YES,判断UICollectionView的frame改变时再返回YES。
    
* `-(UICollectionViewLayoutAttributes _)layoutAttributesForItemAtIndexPath:(NSIndexPath _)indexPath
`
    > 返回对应于indexPath的位置的Cell的布局属性

* `-(UICollectionViewLayoutAttributes _)layoutAttributesForSupplementaryViewOfKind:(NSString _)kind atIndexPath:(NSIndexPath *)indexPath`
    > 返回对应于indexPath的位置的追加视图的布局属性

* `-(UICollectionViewLayoutAttributes * )layoutAttributesForDecorationViewOfKind:(NSString_)decorationViewKind atIndexPath:(NSIndexPath _)indexPath`
    > 返回对应于indexPath的位置的装饰视图的布局属性

 


### 4、自定义`UICollectionViewLayoutAttributes`
> 主要用来布局cell、追加视图、装饰视图里面的指定子元素。

* **实现NSCopying协议?**
* **实现`-(BOOL)isEqual:(id)object`父类方法?**
* 在cell、追加视图、装饰视图中,实现`-(void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes`方法,具体布局指定元素。
* **在Layout类中实现以下方法?**
    * `+(Class)layoutAttributesClass`
    
### 5、重新计算布局

* `invalidateLayout`:执行布局方法,从`-(void)prepareLayout`方法开始重新计算布局。

### 6、切换布局

> 注意:切换的2个布局必须已经实现了 `-(UICollectionViewLayoutAttributes _)layoutAttributesForItemAtIndexPath:(NSIndexPath _)indexPath`方法。否则会报错。

* `setCollectionViewLayout:animated:`

### 7、动画效果


* `initialLayoutAttributesForAppearingItemAtIndexPath:`
* `initialLayoutAttributesForAppearingSupplementaryElementOfKind:atIndexPath:`
* `initialLayoutAttributesForAppearingDecorationElementOfKind:atIndexPath:`
* `finalLayoutAttributesForDisappearingItemAtIndexPath:`
* `finalLayoutAttributesForDisappearingSupplementaryElementOfKind:atIndexPath:`
* `finalLayoutAttributesForDisappearingDecorationElementOfKind:atIndexPath:`


> ### 8、DEMO与参考

* [猫神的UICollection手册](https://onevcat.com/2012/08/advanced-collection-view/)
* [自定义CollectionView布局 @ObjC中国](https://objccn.io/issue-3-3/)
* [raywender自定义CollectoionView布局](https://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest)

© 著作权归作者所有

共有 人打赏支持
上一篇: UICollection要点
下一篇: UICollection要点
d
粉丝 0
博文 10
码字总数 5374
作品 0
青岛
私信 提问
万物有源_Android自动化测试框架UIAutomator原理浅析

简介 UIAutomator是一个Android自动化测试框架,是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架,它只能用于UI即黑盒方面的测试。所以UIAutomator只能运行在Android4.1之后的...

维他ViTa
03/16
0
0
关联选择器--MBContactPicker

MBContactPicker 是基于 UICollection View 的 iOS 风格的关联选择工具库,实现类似 iOS 7 的本地邮件关联选择器的功能。

叶秀兰
2014/01/04
240
0
BMYCircularProgressPullToRefresh

BMYCircularProgressPullToRefresh 是下拉刷新,带有圆形进程视图,类似 Beamly iOS 应用。 此版本的下拉刷新特性可以再 UITableViews 和 UICollection 上使用,灵感来源于 Sam Vermette's S...

叶秀兰
2014/07/22
482
0
CombinationPickerController

CombinationPickerController 是图片选择器,使用 uicollection 视图。CombinationPickerController 可以选择单个图片,可以自定义你的相机,默认只支持人像。CombinationPickerController 兼...

叶秀兰
2014/08/27
510
0
ios UIcollection显示图片

xcode 7.3.1 UIcollection创建的item,cell来加载图片,加载到24个才会显示图片,怎么让他加载一个就显示一个图片

zxcasdqwe123
2016/08/18
42
0

没有更多内容

加载失败,请刷新页面

加载更多

租房软件隐私保护如同虚设

近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询。可电话刚挂不久...

linux-tao
今天
1
0
分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
4
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
2
0
cocoapods 用法

cocoapods install pod install 更新本地已经install的仓库 更新所有的仓库 pod update --verbose --no-repo-update 更新制定的仓库 pod update ** --verbose --no-repo-update...

HOrange
今天
3
0
linux下socket编程实现一个服务器连接多个客户端

使用socekt通信一般步骤 1)服务器端:socker()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接。 2)客户端:socker()建立套接字,连接(connect)服务器,连接上后...

shzwork
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部