iOS中使用UICollectionView
ViewController.m中:
#import "ViewController.h"
//导入我们自定义的Cell
#import "myCollectionViewCell.h"
#define kScreenW [UIScreen mainScreen].bounds.size.width
#define kScreenH [UIScreen mainScreen].bounds.size.height
@interface ViewController ()<UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
@end
@implementation ViewController
//将重用标识符定义成一个全局变量
static NSString *cell_identy = @"cell";
- (void)viewDidLoad {
[super viewDidLoad];
//创建布局对象
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
//设置布局属性
//1.单元格大小 --> 决定 行/列 的单元格的个数
layout.itemSize = CGSizeMake((kScreenW-40)/3.0, 136);
//layout.itemSize = CGSizeMake(145, 150);
//2.设置最小间隙
/**
* 滑动方向垂直:水平间隙由单元格宽度和集合视图宽度决定 最小不能低于最小间隙
垂直间隙就是最小垂直间隙
水平方向滑动:垂直间隙由单元格高度和集合视图高度决定 最小不能低于最小间隙
水平间隙就是最小水平间隙
*/
//垂直方向间隙 (间隙本身是水平的)
layout.minimumLineSpacing = 5;
//水平方向间隙 (间隙本身是垂直的)
layout.minimumInteritemSpacing = 1;
//3.设置滚动方向(向哪滑动)
/**
* UICollectionViewScrollDirectionVertical,垂直
UICollectionViewScrollDirectionHorizontal 水平
*/
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
//4.头/尾视图尺寸
// layout.headerReferenceSize = CGSizeMake(0, 0);
// layout.footerReferenceSize = CGSizeMake(0, 0);
//集合视图
//I.同步布局类对象创建
UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 64, kScreenW, kScreenH-64) collectionViewLayout:layout];
//II.属性
collectionView.delegate = self;
collectionView.dataSource = self;
[self.view addSubview:collectionView];
collectionView.backgroundColor = [UIColor whiteColor];
// 这句话的意思是为了 不管集合视图里面的值 多不多 都可以滚动 解决了值少了 集合视图不能滚动的问题
collectionView.alwaysBounceVertical = YES;
//注册单元格
/**
* 将UICollectionViewCell类的单元格 加上 cell_identy复用标记
*/
[collectionView registerClass:[myCollectionViewCell class] forCellWithReuseIdentifier:cell_identy];
//这步很重要 不然没法加载出你自定义的cell 类比UITableView中自定义cell 也需要这样注册
UINib *nib = [UINib nibWithNibName:@"myCollectionViewCell"
bundle: [NSBundle mainBundle]];
//collectionView声明时 也需要在这里这样注册
[collectionView registerNib:nib forCellWithReuseIdentifier:cell_identy];
}
#pragma mark --UICollectionViewDataSource
//返回item个数
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return 6;
}
//返回单元格 复用
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
//使用注册单元格
myCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cell_identy forIndexPath:indexPath];
cell.backgroundColor = [UIColor clearColor];
//加载图片
cell.imageView.image = [UIImage imageNamed:@"fe8c42e67680bbb387e7f68b90c641bd.jpg"];
cell.imageView.layer.cornerRadius = 50;
cell.imageView.clipsToBounds = YES;
//设置label文字
cell.label.text = [NSString stringWithFormat:@"我是第%ld个cell",indexPath.row+1];
return cell;
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"%ld",indexPath.row);
}
#pragma mark --UICollectionViewDelegateFlowLayout
//边缘大小
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
return UIEdgeInsetsMake(5, 5, 5, 5);
}
//定义每个UICollectionView 的大小
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
最后效果: