使用uicollectionView时需要注意的问题

1.UICollectionView使用流水布局——UICollectionViewFlowLayout时,需要满足条件:

每个item(即cell)的大小是一样的,不仅是宽度,还有高度。这样,当collectionview的宽度发生变化时,item能将其动态填充。
itemSize即为每个cell的尺寸。

collectionview初始化时必须设置一个非空的layout。所以若想使用类似

UICollectionViewController *ctrl = [[UICollectionViewController alloc]init];

来初始化一个collectionviewcontroller,那么就需要重写它的init方法

-(id)init{
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
    layout.itemSize = CGSizeMake(100,100);
    if(self = [super initWithCollectionViewLayout:layout]){
        //这里不用写内容
    }
    return self;
}

设置item之间的间距时,可以用以下,并且只适合UICollectionViewFlowLayout

//垂直方向间距
layout.minimumLineSpacing = 0;
//水平方向间距
layout.minimumInteritemSpacing = 0;

2.collectionview中的布局方法

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{

}

中返回值是一个数组,存放的是rect范围内所有cell的布局属性,即frame。
其中,rect是一个矩形框,它表示的是collectionview的大小位置。即定义了collectionview的大小,那么rect也是返回的该区域内的cell布局。如:

@interface LineLayout(){
    UIView *_view;
}

-(NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect{
    //取出父类算出的布局属性
    NSArray *attsArray = [super layoutAttributesForElementsInRect:rect];

    if (!_view) {
        UIView *view = [[UIView alloc]initWithFrame:rect];
        view.backgroundColor = [UIColor orangeColor];
        _view = view;
        [self.collectionView addSubview:view];
    }
    return attsArray;
}

而collectionview的定义为

_collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 100, mScreenWidth, 300) collectionViewLayout:circle];

效果为:

当collectionview这样设置时

_collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 100, mScreenWidth/2, 300) collectionViewLayout:circle];

效果为

3.在初次使用Masonry时,若报类似

Demo-collectionviewExample[4443:172886] *** Assertion failure in -[MASViewConstraint install], /Users/Suning/Desktop/study/Demo-collectionviewExample/Pods/Masonry/Masonry/MASViewConstraint.m:345

错误,原因在于
使用Masonry为自定义view添加约束时,得先把自定义view添加到父视图上。

上图就是错误用法,将两个位置调换下即可。

时间: 2024-10-04 03:32:17

使用uicollectionView时需要注意的问题的相关文章

比 UICollectionView更好用的IGListKit教程

原文:IGListKit Tutorial: Better UICollectionViews 作者:Ryan Nystrom 译者:kmyhy 每个 app 都以同样的方式开始:几个界面,几颗按钮,一两个 list.但随着进度的进行以及 app 膨胀,功能开始发生变化.你简单的数据源开始在工期和产品经理的压力下变得支离破碎.再过一久,你留下一堆庞大得难以维护的 view controller.今天,IGListKit 来拯救你了! IGListKit 专门用于解决在使用 UICollectio

第二十一讲.UICollectionView(集合视图)以及瀑布流效果, 通知中心(NSNotificationCenter).

一.集合视图(UICollectionView) 1.集合视图的概念 2.如何创建 3.集合视图的布局UICollectionViewFlowLayout 4.自定义cell和 布局协议UICollectionViewDelegateFlowLayout 使用时cell一般选择自定义,而在布局时候要使用代理. UICollectionView的基本使用示例代码分析: #import "ViewController.h" #import "CollectionReusableV

ios开发——UICollectionView初阶

一.功能强大的集合视图 UICollectionView是一种新的数据展示视图,最最基本的集合视图类似于UITableView,就是多行多列展示数据,之前试着用UITableView实现过多行多列展示图片,不过效果一般而且bug较多.ios开发--用UITableView展示多行多列图片   而UICollectionView出现后,这种效果就非常非常容易了,不但如此,之前的各种开源社区里一些瀑布流也变得非常简单.不过,正如刚才所说,这都是UICollectionView最最基本的形式,实际上,

iOS 11 UICollectionView顶部出现白色间隔的问题

iOS11 UICollectionView顶到屏幕顶端会出现一个20高度的白色间隔,是由于UICollectionView的自动调整功能为状态栏留出的位置 只需在创建UICollectionView时加入如下代码关闭自动调整: 该属性是iOS11新加入的,所以一定要在前面加上判断!!!!! if (@available(iOS 11.0, *)) { self.mainCollectionView.contentInsetAdjustmentBehavior = UIScrollViewCon

iOS6与iOS7屏幕适配技巧

一.没有包装任何 导航控制器 或者UITabBarController 1.控制器的view是UIScrollView/UITableView/UICollectionView时(控制器是UITableViewController的时候) - (void)viewDidLoad { [super viewDidLoad]; // #ifdef __IPHONE_7_0是判断是否运行在Xcode5环境下,如果在Xcode5环境下才有下面的代码 #ifdef __IPHONE_7_0 if ([[U

CorAnimation7-高效绘图、图像IO以及图层性能

高效绘图 软件绘图 术语绘图通常在Core Animation的上下文中指代软件绘图(意即:不由GPU协助的绘图).在iOS中,软件绘图通常是由Core Graphics框架完成来完成.但是,在一些必要的情况下,相比Core Animation和OpenGL,Core Graphics要慢了不少. 软件绘图不仅效率低,还会消耗可观的内存.CALayer只需要一些与自己相关的内存:只有它的寄宿图会消耗一定的内存空间.即使直接赋给contents属性一张图片,也不需要增加额外的照片存储大小.如果相同

[iOS Animation]-CALayer 图层性能

图层性能 要更快性能,也要做对正确的事情. ——Stephen R. Covey 在第14章『图像IO』讨论如何高效地载入和显示图像,通过视图来避免可能引起动画帧率下降的性能问题.在最后一章,我们将着重图层树本身,以发掘最好的性能. 隐式绘制 寄宿图可以通过Core Graphics直接绘制,也可以直接载入一个图片文件并赋值给contents属性,或事先绘制一个屏幕之外的CGContext上下文.在之前的两章中我们讨论了这些场景下的优化.但是除了常见的显式创建寄宿图,你也可以通过以下三种方式创建

UICollectionReusableView 使用时的一些问题

在使用UICollectionView 时, 设置分区头时, - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath; 返回值不能为 nil 我开始写时, 写成下面样子,然后就报错 - (UICollectionReus

iOS 程序性能优化

前言 转载自:http://www.samirchen.com/ios-performance-optimization/ 程序性能优化不应该是一件放在功能完成之后的事,对性能的概念应该从我们一开始写代码时就萦绕在我们脑子里.了解 iOS 程序性能优化的相关知识点,从一开始就把它们落实到代码中是一种好的习惯. 初级技巧 使用复用机制 在我们使用 UITableView 和 UICollectionView 时我们通常会遇到「复用 Cell」这个提法,所谓「复用 Cell」就是指当需要展示的数据条