iOS UICollectionView实现横向滑动

2022-08-10,,,

本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下

uicollectionview的横向滚动,目前我使用在了显示输入框的输入历史上;

//
// scvisitorinputaccessoryview.m
// 访客通行录入页面--访客姓名输入历史的inputaccessory

#import "scinputaccessoryview.h"
#import "scinputaccessorycell.h"

#define schorizontalmargin 15.0f
#define scverticalmargin 10.0f

@interface scinputaccessoryview () <uicollectionviewdelegate, uicollectionviewdatasource,uicollectionviewdelegateflowlayout>

@property (weak, nonatomic) iboutlet uicollectionview *collectionview;

/// 名字记录的数组
@property (nonatomic, strong) nsmutablearray *namearray;

@end


@implementation scinputaccessoryview

+ (instancetype)loadnibview {
 return [[[nsbundle mainbundle] loadnibnamed:[scinputaccessoryview classname] owner:self options:nil] objectatindex:0];
}

- (void)awakefromnib {
 [super awakefromnib];
 self.clipstobounds = yes;
 self.collectionview.delegate = self;
 self.collectionview.datasource = self;
 [self setupview];
}

- (void)setupview {

 /// 设置此属性为yes 不满一屏幕 也能滚动
 self.collectionview.alwaysbouncehorizontal = yes;
 self.collectionview.showshorizontalscrollindicator = no;
 // 1.创建流水布局
 uicollectionviewflowlayout *layout = [[uicollectionviewflowlayout alloc] init];
 layout.scrolldirection = uicollectionviewscrolldirectionhorizontal;
 self.collectionview.collectionviewlayout = layout;
 [self registernibwithtableview];
}

#pragma mark - 代理方法 delegate methods
// 设置分区

- (nsinteger)numberofsectionsincollectionview:(uicollectionview *)collectionview {
 return 1;
}

// 每个分区上得元素个数
- (nsinteger)collectionview:(uicollectionview *)collectionview numberofitemsinsection:(nsinteger)section {
 return self.namearray.count;
}

// 设置cell
- (uicollectionviewcell *)collectionview:(uicollectionview *)collectionview cellforitematindexpath:(nsindexpath *)indexpath {

 scinputaccessorycell *cell = [collectionview dequeuereusablecellwithreuseidentifier:nsstringfromclass([scinputaccessorycell class]) forindexpath:indexpath];
 [cell refreshcellwithtitle:self.namearray[indexpath.row]];
 return cell;
}

// 设置cell大小 itemsize:可以给每一个cell指定不同的尺寸
- (cgsize)collectionview:(uicollectionview *)collectionview layout:(uicollectionviewlayout*)collectionviewlayout sizeforitematindexpath:(nsindexpath *)indexpath {
 cgfloat height = 35.0f;
 cgfloat width = [self gainstringwidthwithstring:self.namearray[indexpath.row] font:15.0f height:height];
 return cgsizemake(width, height);
}


// 设置uicollectionview整体的内边距(这样item不贴边显示)
- (uiedgeinsets)collectionview:(uicollectionview *)collectionview layout:(uicollectionviewlayout *)collectionviewlayout insetforsectionatindex:(nsinteger)section {
 // 上 左 下 右
 return uiedgeinsetsmake(scverticalmargin, schorizontalmargin, scverticalmargin, schorizontalmargin);
}

// 设置minimumlinespacing:cell上下之间最小的距离
- (cgfloat)collectionview:(uicollectionview *)collectionview layout:(uicollectionviewlayout *)collectionviewlayout minimumlinespacingforsectionatindex:(nsinteger)section {
 return schorizontalmargin;
}

// 设置minimuminteritemspacing:cell左右之间最小的距离
- (cgfloat)collectionview:(uicollectionview *)collectionview layout:(uicollectionviewlayout *)collectionviewlayout minimuminteritemspacingforsectionatindex:(nsinteger)section {
 return schorizontalmargin;
}

// 选中cell的回调
- (void)collectionview:(uicollectionview *)collectionview didselectitematindexpath:(nsindexpath *)indexpath {
 if (self.selectrowblock) {
 self.selectrowblock(indexpath.row, self.namearray[indexpath.row]);
 }
}

#pragma mark - 对外方法 public methods
/// array数组里面放的元素 必须字符串类型的
- (void)refreshuiwithnamearray:(nsarray<nsstring *> *)array {
 [self.namearray removeallobjects];
 [self.namearray addobjectsfromarray:array];
 [self.collectionview reloaddata];
}


#pragma mark - 内部方法 private methods
// 注册cell
- (void)registernibwithtableview {
 [self.collectionview registernib:[uinib nibwithnibname:[scinputaccessorycell classname] bundle:nil] forcellwithreuseidentifier:nsstringfromclass([scinputaccessorycell class])];
}

- (cgfloat)gainstringwidthwithstring:(nsstring *)string font:(cgfloat)font height:(cgfloat)height {

 if (string.length == 0) {
 return 0.0f;
 }

 cgsize maxsize = cgsizemake(maxfloat, height);
 cgsize realsize = [string boundingrectwithsize:maxsize
   options:nsstringdrawinguseslinefragmentorigin | nsstringdrawingusesfontleading
   attributes:@{nsfontattributename:[uifont systemfontofsize:font]}
   context:nil].size;
 /// 左右各16
 return (realsize.width + 2 * (schorizontalmargin + 1.f));
}

#pragma mark - 点击/触碰事件 action methods

#pragma mark - 懒加载 lazy load

- (nsmutablearray *)namearray {
 if (!_namearray) {
 _namearray = [nsmutablearray arraywithcapacity:0];
 }
 return _namearray;
}

@end

效果图:

demo地址 :xgdevelopdemo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

《iOS UICollectionView实现横向滑动.doc》

下载本文的Word格式文档,以方便收藏与打印。