当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS UICollectionView实现横向滑动

iOS UICollectionView实现横向滑动

2020年06月23日  | 移动技术网IT编程  | 我要评论

怨念之魔法老师,湖南网站优化,知名网红被毁容

本文实例为大家分享了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实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网