"UICollectionView实现带头视图和组的头视图同时存在"实现

实现效果如下:

以前做这效果的界面,总是实现的是section的头视图,因为我一直觉得collectionView是不像UITableView那样有tableHeaderView的,所以每次实现只能是判断indexpath.section为0的时候,组合一下视图做第一个section的头视图.

今天看别人写的Swift项目,看到人家代码的实现这效果的简便,我实在是不敢相信这么容易,于是自己赶紧用OC写了个简单的demo,发现还真是能实现呢......好开心....

实现的源码如下,注释的很清楚啦:

  1 //
  2 //  ViewController.m
  3 //  HeaderCollectionView
  4 //
  5 //  Created by 思 彭 on 16/10/24.
  6 //  Copyright ? 2016年 思 彭. All rights reserved.
  7 //
  8
  9 #import "ViewController.h"
 10 #import "SectionHeaderView.h"
 11
 12 @interface ViewController ()<UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
 13
 14 @property (nonatomic, strong) UICollectionView *collectionView;
 15
 16 @end
 17
 18 @implementation ViewController
 19
 20 #pragma mark - life Cycle
 21
 22 - (void)viewDidLoad {
 23     [super viewDidLoad];
 24     self.title = @"HeaderCollectionView";
 25     self.automaticallyAdjustsScrollViewInsets = NO;
 26     self.navigationController.navigationBar.translucent = NO;
 27     self.view.backgroundColor = [UIColor whiteColor];
 28     [self setCollectionView];
 29     [self setHeaderView];
 30 }
 31
 32 #pragma mark - setUI
 33
 34 - (void)setCollectionView {
 35
 36     UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
 37     layout.itemSize = CGSizeMake((self.view.frame.size.width - 30) / 3, (self.view.frame.size.width - 30) / 3);
 38     self.collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:layout];
 39     self.collectionView.backgroundColor = [UIColor clearColor];
 40     self.collectionView.delegate = self;
 41     self.collectionView.dataSource = self;
 42     // 最重要的一句代码!!!
 43     self.collectionView.contentInset = UIEdgeInsetsMake(200, 0, 0, 0);
 44     self.collectionView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
 45     [self.view addSubview:self.collectionView];
 46
 47     // 注册cell
 48     [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"collectionCellIdentify"];
 49     [self.collectionView registerNib:[UINib nibWithNibName:@"SectionHeaderView" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"sectionHeaderView"];
 50 }
 51
 52 - (void)setHeaderView {
 53
 54     // 注意这里设置headerView的头视图的y坐标一定是从"负值"开始,因为headerView是添加在collectionView上的.
 55     UIView *headerView = [[UIView alloc]initWithFrame:CGRectMake(0, -200, self.view.frame.size.width, 200)];
 56     headerView.backgroundColor = [UIColor greenColor];
 57     [self.collectionView addSubview:headerView];
 58 }
 59
 60 #pragma mark - UICollectionViewDataSource
 61
 62 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
 63
 64     return 10;
 65 }
 66
 67 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
 68
 69     return 5;
 70 }
 71
 72 - (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
 73
 74     UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionCellIdentify" forIndexPath:indexPath];
 75     cell.backgroundColor = [UIColor redColor];
 76     return cell;
 77 }
 78
 79 #pragma mark - UICollectionViewDelegateFlowLayout
 80
 81 - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
 82
 83     return UIEdgeInsetsMake(0, 0, 0, 0);
 84 }
 85
 86 #pragma mark - UICollectionViewDelegate
 87
 88 - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
 89
 90     // 复用SectionHeaderView,SectionHeaderView是xib创建的
 91     SectionHeaderView *headerView = [self.collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"sectionHeaderView" forIndexPath:indexPath];
 92     return headerView;
 93
 94 }
 95
 96 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
 97
 98     return CGSizeMake(self.view.frame.size.width, 41);
 99 }
100
101 @end

每天进步一点点......你也加油哟!!

时间: 2024-11-10 12:38:36

"UICollectionView实现带头视图和组的头视图同时存在"实现的相关文章

设置tableView的组的头视图的高度

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 15;} - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {    return 1;} - (nullable UIView *)tableView:(UITableV

UICollectionView(集合视图)以及自定义集合视图

一.UICollectionView集合视图 其继承自UIScrollView. UICollectionView类是iOS6新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableView类. 1.需要遵循的协议: 1)UICollectionViewDataSource, 2)UICollectionViewDelegate, 3)UICollectionViewDelegateFlowLayout 2.创建collection: UICollectionVi

collectionView怎么添加头视图

我们要使用CollectionView里面的头视图需要先注册头视图 UICollectionReusableView或者 继承UICollectionReusableView的子类,kind类型为UICollectionElementKindSectionHeader,并且需要带一个标识符,我们定义个static 的静态字符串就行,如下所示: [collectionView registerClass:[UICollectionReusableViewclass ]   forSupplemen

iOS:使头视图随表视图滚动

使tableVIew的头视图使表示图滚动,需要使用设置tableView的分组样式 _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped]; 如果分组为一组,直接自定义头视图,然后设置为tableView的headerView, 如果为多组,某些组需要头视图,某些组不需要,需要头视图的正常设置头视图高度,不需要的返回0.01,如果返回nil,会被系统无视,然后返

表视图展开收起 头视图滑动到顶部不动 直到该组单元格全部推上去

类似qq的分组  头视图展开后推到屏幕顶端不动直到该组的单元格全部推上去 实现方法 1.在下面创建表视图的方法里style 设置成UITableViewStylePlain [[ UITableView alloc] initWithFrame:CGRectMake(0, 100, kScreenWide, kScreenHeight - 164) style:UITableViewStylePlain]; 2.表视图的代理方法 要添加设置组的代理方法 - (NSInteger)numberOf

UI tableView 的头视图 &amp; &quot;小广告&quot;

self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 64) style:UITableViewStylePlain]; [self.view addSubview:self.tableView]; [_tableView release]; self.tableView.dataSource =

隐藏头视图即隐藏UINavigationBar

//隐藏头视图即隐藏UINavigationBar - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ [[UINavigationBar appearance]setTranslucent:NO]; return YES; }

点击tableview的头视图按钮来达到收放tableview的列表

// //  ViewController.m //  XIBForiPad // //  Created by Lu_Ca on 15/8/12. //  Copyright (c) 2015年 Lu_Ca. All rights reserved. // // //点击tableview的头视图按钮来达到收放tableview的列表 // #import "ViewController.h" #import "XibForCell.h" #import &quo

测试mv刷新组是否可以同时刷新组内物化视图

我们知道刷新组的目的是为了解决外键关系表刷新先后的问题,从这个目的出发,说明刷新组内物化视图刷新是串行的. 我通过触发器的方式,监控了一下这个现象. 同时也说明了刷新组内,物化视图的刷新并不能并行. --创建物化视图日志 CREATE TABLE POLICY (ID INTEGER PRIMARY KEY , PRODUCT_NAME VARCHAR2(200)); CREATE TABLE AGENT (agent_code VARCHAR2(30) PRIMARY KEY , NAME V