iOS UICollectionView 记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS UICollectionView 记录相关的知识,希望对你有一定的参考价值。

参考技术A UICollectionView将内容显示于一个一个的网络之中,对于展于一些属性相似的内容挺有用的。在用法上有些类似于UITableView。

在UICollectionView的属性设置中,可以直接设置出它的每行显示个数,大小等。但这个方法,当设备不一样时,这些具体参数就显得没啥用处了,所以我想在使用的时候,能根据不屏幕尺寸,自动适配宽度与高度。

解决办法,在视图进行加载之时,先调用一个视图设置方法,来根据自己的需要,计算出每个Cell的宽与高。

func setupView()

let flowLayout = UICollectionViewFlowLayout()

var width = (view.bounds.size.width - 32)  / 2

// 左右间距

flowLayout.minimumInteritemSpacing = 1.0

// 上下行距

flowLayout.minimumLineSpacing = 16.0

// 格子尺寸

flowLayout.itemSize = CGSize(width: width, height: width)

// 上下右左周边的间距

flowLayout.sectionInset = UIEdgeInsets(top: 16, left: 8, bottom: 16, right: 8)

collectionView?.collectionViewLayout = flowLayout



对于width这个变量,可以根据需要,将后面的除数设置成你想要的一行的cell个数,比如,你想一行显示两个就除以2,三个就除以3,以此类推。

需要注意的是,如果每一行的个数调节之后,为了保持各个Cell间的间距看起来一致,还需要设置下那几个间距。

iOS 流布局 UICollectionView使用(UICollectionVIew的代理方法)

UICollectionViewDataSource协议

这个协议主要用于collectionView相关数据的处理,包含方法如下:

设置分区数(这个是可选实现的)

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView;

设置每个分区有多少个item(必须实现)

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section;

设置返回每个item的属性(必须实现)

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;

对头视图和尾视图进行设置(如果需要的话)

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath;

设置某个item是否可以移动 返回NO表示不能移动

- (BOOL)collectionView:(UICollectionView *)collectionView canMoveItemAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(9_0);

移动item的时候会调用这个方法

- (void)collectionView:(UICollectionView *)collectionView moveItemAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath*)destinationIndexPath;

UICollectionViewDelegate协议

这个协议用来设置和处理collectionView的功能和一些逻辑,所有方法都是可选实现

是否允许某个item的高亮,返回NO 则不能进入高亮状态。

- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath;

当item高亮时触发的方法

- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath;

结束高亮时触发的方法

- (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath;

是否可以选中某个item 返回NO不能选中

- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath;

是否可以取消选中某个item

- (BOOL)collectionView:(UICollectionView *)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath *)indexPath;

选中某个item触发的方法

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath;

取消选中某个item时触发的方法

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath;

将要加载头尾视图时调用的方法

- (void)collectionView:(UICollectionView *)collectionView willDisplaySupplementaryView:(UICollectionReusableView *)view forElementKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0);

已经展示某个Item时触发的方法

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath;

已经展示某个头尾视图时触发的方法

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath;

将要加载某个Item时调用的方法

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0);

这个方法设置是否展示长按菜单

- (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath;

这个方法用于设置要展示的菜单选项

- (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(nullable id)sender;

这个方法用于实现点击菜单按钮后的触发方法,通过测试,只有copy,cut和paste三个方法可以使用

- (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(nullable id)sender;

collectionView进行重新布局时调用的方法

- (nonnull UICollectionViewTransitionLayout *)collectionView:(UICollectionView *)collectionView transitionLayoutForOldLayout:(UICollectionViewLayout *)fromLayout newLayout:(UICollectionViewLayout *)toLayout;

 



以上是关于iOS UICollectionView 记录的主要内容,如果未能解决你的问题,请参考以下文章

Storyboards + UIcollectionView:UI 在 iOS 模拟器和设备上的显示方式不同

iOS UICollectionView 记录

如何从JSON加载特定数据并显示UICollectionView?

iOS——UICollectionView

UICollectionView 不加载-iOS

iOS 7 中 UICollectionView 中不需要的垂直滚动