博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UICollectionViewFlowLayout使用示例
阅读量:4979 次
发布时间:2019-06-12

本文共 6951 字,大约阅读时间需要 23 分钟。

UICollectionViewFlowLayout使用示例

 

效果

 

源码

////  ViewController.m//  LayoutViewController////  Created by YouXianMing on 16/5/3.//  Copyright © 2016年 YouXianMing. All rights reserved.//#import "ViewController.h"#import "UIView+SetRect.h"#import "RootModel.h"#import "FlowStyleCell.h"#import "CollectionHeaderView.h"#import "CollectionBottomView.h"@interface ViewController () 
@property (nonatomic, strong) RootModel *rootModel;@property (nonatomic, strong) UICollectionView *collectionView;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; [self createDataSource]; [self createCollectionView];}#pragma mark - Create data source.- (void)createDataSource { NSDictionary *datas = @{
@"response" : @YES, @"datas" : @[@{
@"title" : @"Header1", @"subTitle" : @"Bottom1", @"infos" : @[@{
@"name" : @"1"}, @{
@"name" : @"2"}, @{
@"name" : @"3"}, @{
@"name" : @"4"}, @{
@"name" : @"5"}, @{
@"name" : @"6"}, @{
@"name" : @"7"}, @{
@"name" : @"8"}, @{
@"name" : @"9"}]}, @{
@"title" : @"Header2", @"subTitle" : @"Bottom2", @"infos" : @[@{
@"name" : @"1"}, @{
@"name" : @"2"}, @{
@"name" : @"3"}, @{
@"name" : @"4"}, @{
@"name" : @"5"}, @{
@"name" : @"6"}]}, @{
@"title" : @"Header3", @"subTitle" : @"Bottom3", @"infos" : @[@{
@"name" : @"1"}, @{
@"name" : @"2"}, @{
@"name" : @"3"}, @{
@"name" : @"4"}, @{
@"name" : @"5"}, @{
@"name" : @"6"}, @{
@"name" : @"7"}, @{
@"name" : @"8"}]}]}; self.rootModel = [[RootModel alloc] initWithDictionary:datas];}#pragma mark - Create UICollectionView.- (void)createCollectionView { self.view.backgroundColor = [UIColor whiteColor]; // Setup UICollectionViewFlowLayout. UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new]; layout.itemSize = CGSizeMake(90, 120); layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0); layout.minimumInteritemSpacing = 10.f; // 横向排列最小间距 layout.minimumLineSpacing = 5.0f; // 纵向排列最小间距 // Init UICollectionView. self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout]; self.collectionView.backgroundColor = [UIColor clearColor]; self.collectionView.delegate = self; self.collectionView.dataSource = self; // Register CollectionHeaderView & CollectionBottomView. [self.collectionView registerClass:[FlowStyleCell class] forCellWithReuseIdentifier:@"FlowStyleCell"]; [self.collectionView registerClass:[CollectionHeaderView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"CollectionHeaderView"]; [self.collectionView registerClass:[CollectionBottomView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"CollectionBottomView"]; [self.view addSubview:self.collectionView];}#pragma mark - UICollectionView's delegate & dataSource.- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { DatasModel *dataModel = self.rootModel.datas[section]; return dataModel.infos.count;}- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { return self.rootModel.datas.count;}- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { DatasModel *dataModel = self.rootModel.datas[indexPath.section]; InfoModel *infoModel = dataModel.infos[indexPath.row]; FlowStyleCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"FlowStyleCell" forIndexPath:indexPath]; cell.data = infoModel; cell.indexPath = indexPath; [cell loadContent]; return cell;}- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { CustomCollectionReusableView *reusableView = nil; if ([kind isEqualToString:UICollectionElementKindSectionHeader]) { reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"CollectionHeaderView" forIndexPath:indexPath]; DatasModel *dataModel = self.rootModel.datas[indexPath.section]; reusableView.data = dataModel; reusableView.indexPath = indexPath; [reusableView loadContent]; } else if ([kind isEqualToString:UICollectionElementKindSectionFooter]) { reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"CollectionBottomView" forIndexPath:indexPath]; DatasModel *dataModel = self.rootModel.datas[indexPath.section]; reusableView.data = dataModel; reusableView.indexPath = indexPath; [reusableView loadContent]; } return reusableView;}#pragma mark - UICollectionViewDelegateFlowLayout.- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section { // If you have headerView, you must implement this method. return CGSizeMake(Width, 30);}- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section { // If you have footerView, you must implement this method. return CGSizeMake(Width, 40);}#pragma mark - Hide statusBar.- (BOOL)prefersStatusBarHidden { return YES;}@end

 

细节

itemSize的含义

minimumLineSpacing的含义

minimunInteritemSpacing的用途

 

转载于:https://www.cnblogs.com/YouXianMing/p/5457351.html

你可能感兴趣的文章
编译预处理指令:文件包含指令、宏定义指令、条件编译指令
查看>>
PHP函数 ------ ctype_alnum
查看>>
网站安全
查看>>
WS-Addressing 初探
查看>>
.NET+模块编排+数据库操作类的封装+分层架构+实体类+Ajax.net+Athem.NET+javascript+Activex组件+用户权限等...
查看>>
Markdown不常见功能
查看>>
(二)NUnit单元测试心得
查看>>
hdu_2604Queuing(快速幂矩阵)
查看>>
frame.bounds和center
查看>>
HDU 1102 Constructing Roads
查看>>
android StaticLayout参数解释
查看>>
多线程之ThreadLocal类
查看>>
Qt-读取文本导出word
查看>>
OC语言description方法和sel
查看>>
C#中得到程序当前工作目录和执行目录的五种方法
查看>>
扫描线与悬线
查看>>
用队列和链表的方式解决约瑟夫问题
查看>>
python 迭代器与生成器
查看>>
[django]form的content-type(mime)
查看>>
仿面包旅行个人中心下拉顶部背景放大高斯模糊效果
查看>>