关于CollectionView布局问题

个人在做新特性界面时,时长会犯的错误,总结一下,希望对大家有帮助.

1.如果我们使用的是storyboard中的CollectionView,它的布局继承的是

UICollectionViewFlowLayout;大部分情况下我们会用到它;CollectionView中的cell没有UILable,UIImageView等控件,所以一般我们会自定义cell,并创建相应的xib来注册注册重用的cell

[self.collectionView registerNib:[UINib nibWithNibName:@"MyCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:reuseIdentifier];

如果不需要自定义cell则用:

[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];

还有一些常用属性:

// 1.设置分页

self.collectionView.pagingEnabled = YES;

// 2.去除滚动条

self.collectionView.showsHorizontalScrollIndicator = NO;

// 3.去除回弹效果

self.collectionView.bounces = NO;

2.一定不要忘了设置cell大小

#import <UIKit/UIKit.h>

@interface MyLayout : UICollectionViewFlowLayout

@end

#import "MyLayout.h"

@implementation MyLayout

-(void)prepareLayout {

self.itemSize = CGSizeMake(375, 667);

//设置滚动方向为水平滚动

self.scrollDirection = UICollectionViewScrollDirectionHorizontal;

//    self.sectionInset = UIEdgeInsetsMake(0, 10, 0, 10);

}

@end

3.自定义布局:下面是我自定义布局实现的效果,需用到下面两个方法

#import "MyCircleLayout.h"

@implementation MyCircleLayout

//设置cell布局

-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {

NSMutableArray *arrayM = [NSMutableArray array];

// 获取section对应的cell的总数

NSUInteger count = [self.collectionView numberOfItemsInSection:0];

for (int i = 0; i< count; i++) {

//创建i位置cell的对应的IndexPath

NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:0];

//        创建i位置cell的属性

UICollectionViewLayoutAttributes *atts = [self layoutAttributesForItemAtIndexPath:indexPath];

[arrayM addObject:atts];

}

return arrayM;

}

//返回indexPath对应cell 的布局属性

-(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath {

NSInteger count = [self.collectionView numberOfItemsInSection:indexPath.section];

//    半径

CGFloat radius = 100;

CGFloat centerX = self.collectionView.frame.size.width * 0.5;

CGFloat centerY = self.collectionView.frame.size.height * 0.5;

//    单位旋转角度

CGFloat rota = 2 * M_PI / count;

//    创建i位置对应cell属性

UICollectionViewLayoutAttributes *attrs = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];

attrs.size = CGSizeMake(50, 50);

if (count == 1) {

attrs.center = CGPointMake(centerX, centerY);

} else {

CGFloat angle = rota * indexPath.item;

//    cell中心坐标

CGFloat attrsCenterX = centerX + radius * cos(angle);

CGFloat attrsCenterY = centerY + radius * sin(angle);

attrs.center = CGPointMake(attrsCenterX, attrsCenterY);

}

return attrs;

}

@end

时间: 2024-09-30 19:24:03

关于CollectionView布局问题的相关文章

Dynamic支持CollectionView布局 、 MotionEffects特效 、 BlurImage效果 、 TextKit

1 使用UIDynamicAnimator对集合视图进行布局 1.1 问题 UIKit Dynamic动力模型一个非常有趣的用途就是影响集合视图的布局,可以给集合视图的布局添加各种动力行为,使其产生丰富多彩的效果,本案例使用UIDynamicAnimator对集合视图进行布局,实现一个弹性列表,如图-1所示: 图-1 1.2 方案 首先创建一个SingleViewApplication项目,给UIColor类创建一个分类UIColor+RandomColor,提供一个产生随机颜色的静态方法ran

collectionView布局

关于 collectionView的layout布局方法: 设置cell的间距,行间距,组与组之间的间距,都是在layout里面来设置. 包括,滚动方向. -(void)prepareLayout [super prepareLayout] //最小行间距 self.minimumLineSpacing =1; //最小cell间距 self.minimumInteritemSpacing =1; //组与组之间的间距 self.sectionInset =UIEdgeInsetsMake(0,

布局UIConllectionView

1.在UIView/.h文件中声明属性 1 // 声明集合视图属性 2 @property (nonatomic, strong) UICollectionView *collectionView; 3 4 // UICollectionViewFlowLayout 用来给collectionView布局 5 @property (nonatomic, strong) UICollectionViewFlowLayout *myFlowLayout; 2.在UIView/.m文件中重写init方

IOS6-UICollectionViewController

CollectViewController.h @interface CollectViewController : UIViewController<UICollectionViewDataSource,UICollectionViewDelegate> @property(nonatomic,retain)NSMutableArray *dataSource; @property(nonatomic,retain)UICollectionView *myCollectionView;//类

iOS开发-UI (三)Collection

知识点 1.UICollectionView的创建 2. UICollectionView的常用代理方法 3. UICollectionView相关XIB操作 ================================ UICollectionView的创建 1.UICollectionViewLayout 作用:控制collectionView布局的一个抽象类 注意:一般不直接使用这个类,因为这个类很多方法都没有实现,只是规定了很多属性和方法,自已定义布局需要创建一个类继承UIColle

自定制emoji替换系统的emoji键盘

一.关于emoji表情 随着iOS系统版本的升级,对原生emoji表情的支持也越来越丰富.emoji表情是unicode码中为表情符号设计的一组编码,当然,还有独立于unicode的另一套编码SBUnicode,在OS系统中,这两种编码都有很好的支持.UI系统会自动帮我们将编码转义成表情符号,例如用SBUnicode如下代码: UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];    l

iOS流布局UICollectionView系列四——自定义FlowLayout进行瀑布流布局

iOS流布局UICollectionView系列四--自定义FlowLayout进行瀑布流布局 一.引言 前几篇博客从UICollectionView的基础应用到设置UICollectionViewFlowLayout更加灵活的进行布局,但都限制在系统为我们准备好的布局框架中,还是有一些局限性,例如,如果我要进行瀑布流似的不定高布局,前面的方法就很难满足我们的需求了,如下: 这种布局无疑在app的应用中更加广泛,商品的展示,书架书目的展示,都会倾向于采用这样的布局方式,当然,通过自定义FlowL

iOS核心笔记——UICollectionView-布局对象

iOS核心笔记--UICollectionView-布局对象 1.UICollectionView布局对象: 1-1.UICollectionViewLayout: ?了解:1.UICollectionViewLayout没有itemSize属性,而collectionView的cell的大小不能为0或者小于0:所以,通常collectionView使用其子类UICollectionViewFlowLayout布局cell. ?了解:2.UICollectionViewLayout中声明了布局可

iOS:仿写探探App动画

一.简单介绍 探探动画比较新颖,这也是它在众多交友软件中火热的一个特色.实现这种动画的方式可以有两种方式实现: 1.使用转场动画实现  2.使用CollectionView自定义布局实现, 此处我提供了第二种方式实现. 二.核心技术 1.给collectionView自定义layout布局 2.给cell添加拖拽手势,根据手势拖拽的角度删除当前数据 三.演示截图 四.demo地址 方式一:转场动画下载链接: https://pan.baidu.com/s/1hs02D0K 密码: s9kr,