UICollectionView flowlauout

1.创建视图

(1).这是苹果官方提供的一种瀑布流效果,之后加到collectionView上
UICollectionViewFlowLayout  *flowlauout =[[UICollectionViewFlowLayout alloc] init];

 (2).不同于tableview ,它用item进行显示, 所以需要先设置每个item有多大
flowlauout.itemSize =CGSizeMake(90, 160);

 (3).设置行间距
flowlauout.minimumInteritemSpacing =2;

 (4)设置列间距
flowlauout.minimumLineSpacing =2;

   (5).设置默认的滚动方向,默认是垂直的方向
flowlauout.scrollDirection =UICollectionViewScrollDirectionHorizontal;

  (6).设定头或者尾视图的尺寸
flowlauout.headerReferenceSize =CGSizeMake(0, 300);

   (7).创建一个collectionView
 UICollectionView *collectionView= [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) collectionViewLayout:flowlauout];

注意把flowlauout加上

 (8).接下来就是和tableView很相似 ,使用前需要签两个协议dataSource ,delegate
 collectionView.dataSource =self;
    [collectionView setDelegate:self];

(9).把collectionView加到self.view上
[self.view addSubview:collectionView];

  (10).通过注册的方式创建cell(这是与tableView不通过的地方)
  第一个参数 :需要制定注册对象的类型
 第二个参数 :重用标志
[collectionView registerClass:[MyCell class] forCellWithReuseIdentifier:@"reuse"];

 (10),注册一个头视图
[collectionView registerClass:[MyCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader  withReuseIdentifier:@"headerView"];
// 第一个参数 :需要注册的对象类型
// 第二个参数 :指定是头视图还是尾视图,常量字符串在系统的UICollectionViewFlowlayout类的最上面
// 第三个参数 :重用标志

2.header 头视图的创建

-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
        MyCollectionReusableView *view =  [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader  withReuseIdentifier:@"headerView" forIndexPath:indexPath];
        view.myLabel.text [email protected]"1111";
        view.frame =CGRectMake(0, 0, 100, 100);
        return view;
    }else{
        return nil;
    }
}

使用注册的方式创建的cell,必须使用自定义的cell,否则在里面会重复大量的创建视图,为了杜绝重复创建,必须使用自定义cell

 3. collectionView的两个协议方法
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return self.arr.count;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
 #warning 在collectionCell的创建的时候,提供了另一种不同于tableview的cell创建方式

  MyCell *cell =[collectionView dequeueReusableCellWithReuseIdentifier:@"reuse" forIndexPath:indexPath];
    // 只要通过注册的方式创建的cell ,在取值的时候就不需要进行是否为空的判断了
   cell 的背景颜色
    cell.contentView.backgroundColor =[UIColor whiteColor];
    cell 的文本内容
    cell.myLabel.text =[NSString stringWithFormat:@"%ld", indexPath.row];

    // 用sd 显示
    [cell.myImageView sd_setImageWithURL:[NSURL URLWithString:self.arr[indexPath.row]]];

    return cell;
}

4.创建一个collectionViewCell

 在cell的.h文件中
@property(nonatomic ,retain)UIImageView *myImageView;
@property(nonatomic ,retain)UILabel *myLabel;

 在cell.m文件中

-(instancetype )initWithFrame:(CGRect)frame{
    self =[super initWithFrame:frame];
    if (self) {
        self.myImageView =[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 80, 100)];
        [self.contentView addSubview:self.myImageView];
//        [_myImageView release];
        self.myLabel =[[UILabel alloc] initWithFrame:CGRectMake(0, 100, 80, 30)];
        [self.contentView addSubview:self.myLabel];
//        [self.myLabel release];

    }
    return self;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 09:58:10

UICollectionView flowlauout的相关文章

UICollectionView介绍使用

UICollectionView是一种类似于UITableView但又比UITableView功能更强大.更灵活的视图,这是源于它将UICollectionView对cell的布局交给了UICollectionViewLayout,而且允许用户自定义layout来进行布局. 下面是UICollectionView合并内容和布局并生成最终界面的一个流程: 当UICollectionView显示内容时,先从Data source(数据源)获取cell,然后交给UICollectionView.再从U

UIScrollView的delegate方法妙用之让UICollectionView滑动到某个你想要的位置

一个UICollectionView有好多个cell,滑动一下,谁也不知道会停留在哪个cell,滑的快一点,就会多滑一段距离,反之则会滑的比较近,这正是UIScrollview用户体验好的地方. 如果想要UICollectionView停留到某个cell的位置,可以用 - (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPos

IOS 瀑布流UICollectionView实现

IOS 瀑布流UICollectionView实现 在实现瀑布流之前先来看看瀑布流的雏形(此方法的雏形 UICollectionView) 对于UICollectionView我们有几点注意事项 它和tableView不一样,ContentView的内容完全需要我们自己去添加. 它与tableview相比,他的初始化需要FlowLayout并且大部分操作在其上. UIcollectionView的实用性极强,虽然有时他并不是最好的解决方案,但是它可以很灵活的实现各种效果. 图(一) 如图,模拟器

iOS8 UICollectionView横向滑动demo

在iOS8中,scrollView和加载在它上面的点击事件会有冲突,所以做一个横向滑动的界面最好的选择就是UICollectionView. 这个效果可以用苹果公司提供的官方demo修改而来,下载地址https://github.com/SeniorZhai/LineLayout. 主要介绍涉及到的几个属性,在LineLayout.m文件中: //cell大小 self.itemSize = CGSizeMake(200, 250); //水平滑动 self.scrollDirection =

自定义UICollectionLayout布局 —— UIKit之学习UICollectionView记录一《瀑布流》

一.思路 思路一:比较每一行所有列的cell的高度,从上到下(也就是从第一行开始),从最短的开始计算,(记录下b的高度和索引,从开始计算,依次类推) 思路二:设置上.下.左.右间距和行间距.列间距及列数. 思路三:实现的重要的方法. 二.代码先行. 1.自定义layout类. //入口 #import <UIKit/UIKit.h> @protocol STRWaterLayoutDelegate; @interface STRWaterLayout : UICollectionViewLay

手把手教你使用UICollectionView写公司的项目

公司的UI图 在很多app中都有这样通用的页面,一直没有机会使用UICollectionView,只是简单的看过他的使用方法.今天公司美工出图,使用了他,并且遇到了好多的坑.记录一下过程,不确定使用的方法是不是最优的,如果有更好的方案,一起讨论,一起进步 理论篇 一.UICollectionViewLayout是做什么的? 1.1 在创建UITableView的时候,使用的是- (instancetype)initWithFrame:(CGRect)frame style:(UITableVie

集合视图(UICollectionView)

集合视图的四个组成部分: 单元格:它是集合视图中的一个单元格. 节:它是集合视图中的一个行数据,由多个单元格构成 补充视图:它是节的头和脚 装饰视图:集合视图中的背景图. UICollectionView继承自UIScrollView.有两个协议:UICollectionViewDelegate委托协议和UICollectionViewDataSource数据源协议. UICollectionViewCell是单元格类,它的布局是有UICollectionViewLayout类定义的,它是一个抽

UICollectionView基础

前言 这个控件,看起来与UITableView有点像,而且基本的用法也很相像哦!!! 我们来看看API: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #pragma mark - UICollectionViewDataSource // 指定Section个数 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { ret

UICollectionView

UICollectionView是Apple在iOS6开始,提供给我们的一个强大的控件.最简单的UICollectionView就是GridView,标准的UICollectionView包含如下几个部分: 1 UICollectionReusableView<SupplementaryView>:可以指定section的Header或者Footer 2 UICollectionViewCell:用于展示内容的主体,对于不同的cell可以指定不同尺寸和不同的内容 再次说明,UICollecti