使用 collectionView 实现表头,区头,区尾

UICollectionView 的使用是跟表的使用是一样,瀑布流的布局会比表的效果更好,这里说一下 collectionView 设置表头, 区头,区尾

设置表头可以约束 collectionView 居上的距离

其中区头,区尾 是继承 UICollectionReusableView

  1 //
  2 //  HomePageViewController.m
  3 //  MainStoryboard
  4 //
  5 //  Created by mac on 16/4/21.
  6 //  Copyright © 2016年 mac. All rights reserved.
  7 //
  8
  9 #import "HomePageViewController.h"
 10 #import "ZMZScrollView.h"
 11 #import "ZkCollectionViewCell.h"
 12 #import "MyHeaderViewView.h"
 13
 14
 15
 16 #define kScreenWidth [UIScreen mainScreen].bounds.size.width
 17
 18 #define KScreenHeight [UIScreen mainScreen].bounds.size.height
 19
 20 #define ARMCOLOR [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1]
 21
 22 @interface HomePageViewController ()<UICollectionViewDataSource,UICollectionViewDelegate>
 23
 24 @property (nonatomic, strong) UICollectionView* collectionView ;
 25
 26 @end
 27
 28 //设置标识
 29 static NSString * indentify = @"indentify";
 30
 31
 32 @implementation HomePageViewController
 33
 34 - (void)viewDidLoad {
 35
 36     [super viewDidLoad];
 37
 38     /**
 39      *  先创建 collectionView 在创建下面的 scrollView
 40      */
 41
 42     [self waterfall];
 43
 44     [self createScrollView];
 45
 46
 47 }
 48 #pragma mark 轮播广告
 49 - (void)createScrollView
 50 {
 51     ZMZScrollView *ZScroller = [[ZMZScrollView alloc]initWithFrame:CGRectMake(0, -200, kScreenWidth, 200)];
 52
 53     ZScroller.imageNameArray = @[@"http://upload.chadaodian.com/mobile/special/s0/s0_05134290739539518.jpg",@"http://upload.chadaodian.com/mobile/special/s0/s0_05134291123904050.jpg",@"http://upload.chadaodian.com/mobile/special/s0/s0_05134291206563185.jpg"];
 54
 55     ZScroller.backgroundColor = [UIColor redColor];
 56
 57     [self.collectionView addSubview:ZScroller];
 58
 59 }
 60 -(void)waterfall{
 61
 62     UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
 63     flowLayout.minimumInteritemSpacing = 1.0f;
 64
 65
 66     [flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
 67
 68     self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, kScreenWidth, KScreenHeight-64.0f) collectionViewLayout:flowLayout];
 69
 70     self.collectionView.backgroundColor = [UIColor colorWithRed:237 / 255.0f green:237 / 255.0f blue:237 / 255.0f alpha:1.0f];
 71
 72     self.collectionView.contentInset = UIEdgeInsetsMake(200.0f, 0.0f, 0.0f, 0.0f);
 73
 74
 75     self.collectionView.delegate=self;
 76     self.collectionView.dataSource = self;
 77
 78     [self.view addSubview:self.collectionView];
 79
 80 #pragma mark -- 头部大小设置
 81     [flowLayout setHeaderReferenceSize:CGSizeMake(kScreenWidth, 40.0f)];
 82     /**
 83      *  这里还可以设置区尾的大小
 84      */
 85
 86 #pragma mark -- 注册单元格
 87     [self.collectionView registerNib:[UINib nibWithNibName:@"ZkCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:indentify];
 88
 89 #pragma mark -- 注册头部视图
 90     [self.collectionView registerClass:[MyHeaderViewView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView"];
 91
 92     /**
 93      *  这里注册区尾
 94      *
 95      */
 96 }
 97
 98 //设置头部内容
 99 -(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
100 {
101     UICollectionReusableView *reusableView = nil;
102
103     if (kind == UICollectionElementKindSectionHeader) {
104         //定制头部视图的内容
105         MyHeaderViewView * headerV =(MyHeaderViewView *)[collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath];
106
107         headerV.titleLab.text =  [NSString stringWithFormat:@"section %ld‘s header",(long)indexPath.section];;
108
109         reusableView = headerV;
110     }
111     /**
112      *  在这里设置区尾  UICollectionElementKindSectionFooter
113      */
114
115     return reusableView;
116 }
117
118
119 #pragma mark - UICollectionViewDelegateWaterfallLayout
120
121 //返回 indexPath 处的 item 的大小。
122 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
123 {
124
125         return CGSizeMake(170.0f, 220.0f);
126
127 }
128 //设定全局的行间距,如果想要设定指定区内Cell的最小行距,
129 -(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{
130
131         return 15.0f;
132 }
133
134 //设定collectionView(指定区)的边距
135 - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
136
137     return UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f);
138 }
139
140 #pragma mark - UICollectionViewDataSource
141 -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
142     return 9;
143 }
144
145 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
146
147     return 2;
148 }
149
150 - (UICollectionViewCell* )collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
151
152         ZkCollectionViewCell* cell =[collectionView dequeueReusableCellWithReuseIdentifier:indentify forIndexPath:indexPath];
153         cell.backgroundColor = [UIColor whiteColor];
154
155         cell.synopsisLabel.text=@"11111";
156         return cell;
157 }
158
159 //点击单元格
160 -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
161 {
162     NSLog(@"%ld区--%ld单元格",(long)indexPath.section,(long)indexPath.row);
163 }
164
165
166 @end

时间: 2024-10-16 10:22:14

使用 collectionView 实现表头,区头,区尾的相关文章

如何判断第一个节区头的RVA

结论: 第一个节区头的RVA = Size of Optional Header+IMAGE_OPTIONAL_HEADER的RVA 检验: Size of Optional Header = 0xE0 IMAGE_OPTIONAL_HEADER的RVA = 0xF8 0xE0 + 0xF8 = 0x1D8 原文地址:https://www.cnblogs.com/chrysanthemum/p/12444259.html

C++中栈区 堆区 常量区

原文地址:http://blog.csdn.net/xcyuzhen/article/details/4543264 C++中栈区 堆区 常量区(由一道面试题目而学习) 2009-04-28 21:01 #include<iostream.h> void main() { char a[]="abc";栈 char b[]="abc";栈 char* c="abc";abc在常量区,c在栈上. char* d="abc&qu

FAT32文件系统学习(3) —— 数据区(DATA区)

FAT32文件系统学习(3) —— 数据区(DATA区) 今天继续学习FAT32文件系统的数据区部分(Data区).其实这一篇应该是最有意思的,我们可以通过在U盘内放入一些文件,然后在程序中读取出来:反过来也可以用程序在U盘内写入一下数据,然后在windows下可以看到写入的文件.这些笔者都会在这篇文章中演示.同时,在写这篇文章的时候笔者也发现了许多意想不到的规律. 1.本文目录 1.读取根目录 2.短文件名目录项 3.长文件名目录项 4.U盘写入文件夹 5.参考文献 2.读取根目录 两张FAT

C语言的内存管理分析 栈区 代码区 堆区 静态区 常量区

系统为了管理内存 把内存划分了几个区域 1> 栈区 栈区之中的数据在栈区之中以栈的形式进行存储. 栈区的特点:数据是先进后出, 放在栈区里面存放的是局部变量.(例如定义在函数内部的变量) 栈区之中的数据(局部变量)的作用范围过了之后,系统就会回收自动管理栈区的内存(分配内存 , 回收内存),不需要开发人员来手动管理 2> 堆区 高效的使用内存 这里的内存可以由程序员自己手动管理 高效的使用内存  例如: 申请内存 释放内存.优化内存 ARC 申请内存的函数 malloc()  memary a

p,将Young 区升级为Older区Older区的大小等

第一个线程负责回收Heap的Young区第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能. JVM的垃圾回收机制详解和调优1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作. 在充分理

iOS程序中的内存分配 栈区堆区全局区(转)

在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同.一.内存分区 栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等.栈是系统数据结构,对应线程/进程是唯一的.优点是快速高效,缺点时有限制,数据不灵活.[先进后出] 栈空间分静态分配 和动态分配两种. 静态分配是编译器完成的,比如自动变量(auto)的分配. 动态分配由alloca函数完成. 栈的动态分配无需释放(是自动的),也就没有释放函数. 为可移植的程序起见,栈的动态分配操作是不

给UITextField设置头或尾空白

有时候,我们需要在UITextField的头尾加入一些空白,如下图所示: 其中,黄色和红色部分代表空白. 实现起来,比较简单,只需要设置UITextField的leftView.leftViewMode和rightView.rightViewMode即可,代码如下: 假设现有UItextField * txtField: UIView * rView =[[UIView alloc] initWithFrame:CGRectMake(txtField.frame.size.width - 10,

bootstrap-带有头和尾的面板

1.运行效果如图所示 2.实现代码如下 <!DOCTYPE html> <html> <head>     <meta charset="utf-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <title>面板--带有头和尾的面板</title>     <!-- 最新版本

栈区堆区全局区

iOS程序中的内存分配 栈区堆区全局区 在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同.一.内存分区 栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等.栈是系统数据结构,对应线程/进程是唯一的.优点是快速高效,缺点时有限制,数据不灵活.[先进后出] 栈空间分静态分配 和动态分配两种. 静态分配是编译器完成的,比如自动变量(auto)的分配. 动态分配由alloca函数完成. 栈的动态分配无需释放(是自动的),也就没有释放函数.