iOS UICollectionView实现横向滑动
程序员文章站
2022-06-30 10:14:50
本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使用在了显示输入框的输入历史上;////...
本文实例为大家分享了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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。