最近在项目开发中遇到了不规则搜索布局的问题。之前常用的解决方案是用一个tableview用一个循环动态的加载,唯一的缺点是需要动态的移除,其实也已经足够。https://download.csdn.net/download/kuuailetianzi/9905316,需要的话可以下载使用。请教了一下身边的美女同事,她那边给出的思路是用UICollectionView的复用来实现。解决方案如下。

  1、pod导入JQCollectionViewAlignLayout库

  2、核心代码如下

  

//此处用库对象JQCollectionViewAlignLayout

JQCollectionViewAlignLayout * layout = [[JQCollectionViewAlignLayout alloc]init];

layout.itemSize = CGSizeMake(K_CC_SCREEN_WIDTH, 40);

//此处设置行间距

layout.minimumLineSpacing = 10;

//此处设置列间距

layout.minimumInteritemSpacing = 10;

self.collectionView = [[UICollectionView alloc]initWithFrame:CGRectZero collectionViewLayout:layout];

[self.bottomView addSubview:self.collectionView];

self.collectionView.delegate = self;

self.collectionView.dataSource = self;

self.collectionView.layer.masksToBounds = YES;

self.collectionView.layer.cornerRadius = 8.0;

self.collectionView.showsVerticalScrollIndicator = NO;

self.collectionView.showsHorizontalScrollIndicator = NO;

self.collectionView.backgroundColor = [UIColor clearColor];

[self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {

make.width.mas_equalTo(K_CC_SCREEN_WIDTH);

make.bottom.mas_equalTo(self.bottomView);

make.left.mas_equalTo(0);

make.top.mas_equalTo(60);

}];

self.collectionView.contentInset = UIEdgeInsetsMake(10, 10, 10, 10);

[self.collectionView registerClass:[CCHighSeasPoolReturnCell class] forCellWithReuseIdentifier:kCellReuseIdentifier];

[self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:kFooterReuseIdentifier];

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

CCHighSeasPoolReturnCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kCellReuseIdentifier forIndexPath:indexPath];

NSString *codevalue= self.data[indexPath.section].items[indexPath.item].itemtitle;

//选中项索引,修改背景、文本颜色,并给变量赋值

if (indexPath.item==self.selectItemIndex) {

cell.contentView.backgroundColor = K_CC_COLOR_STRING(@"#343E79");

cell.lblTitle.textColor = K_CC_COLOR_STRING(@"#FFFFFF");

self.rejectreason=codevalue;

}else{

cell.contentView.backgroundColor = K_CC_COLOR_STRING(@"#F5F5F5");

cell.lblTitle.textColor = K_CC_COLOR_STRING(@"#333333");

}

cell.title = codevalue;

return cell;

}

//初始化数组数据

-(void)loadData{

if (!_data) {

NSMutableArray *data = [[NSMutableArray alloc] init];

//JQCollectionViewItemsVerticalAlignment verticalAlignments[] = {JQCollectionViewItemsVerticalAlignmentCenter, JQCollectionViewItemsVerticalAlignmentTop, JQCollectionViewItemsVerticalAlignmentBottom};

//设置每一项水平从左到右对齐

JQCollectionViewItemsHorizontalAlignment horizontalAlignments[] = {JQCollectionViewItemsHorizontalAlignmentCenter, JQCollectionViewItemsHorizontalAlignmentLeft, JQCollectionViewItemsHorizontalAlignmentRight, JQCollectionViewItemsHorizontalAlignmentFlow};

//JQCollectionViewItemsDirection directions[] = {JQCollectionViewItemsDirectionLTR, JQCollectionViewItemsDirectionRTL};

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

JQCollectionViewItemsHorizontalAlignment horizontal = horizontalAlignments[1];

NSInteger count = self.dataAddressList.count;

NSMutableArray *items = [[NSMutableArray alloc] init];

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

UIColor *color = K_CC_COLOR_STRING(@"#F5F5F5");

NSDictionary *dic=[self.dataAddressList objectAtIndex:j];

NSString *codevalue=[dic objectForKey:@"codevalue"];

//宽度自适应

CGFloat labelW = [CCCommonAPI getWidthWithString:codevalue font:K_CC_FONT(14) constraintSize:CGSizeMake(MAXFLOAT, 40.0f)];

//此处为了给每一个项留一定的空白

CGFloat width = labelW+10;

CGSize size = CGSizeMake(width, 40);

CCHighSeasPoolReturnItemModel *item = [[CCHighSeasPoolReturnItemModel alloc] initWithColor:color size:size index:j];

item.itemtitle=codevalue;

[items addObject:item];

}

CCHighSeasPoolReturnModel *section = [[CCHighSeasPoolReturnModel alloc] init];

//                    section.verticalAlignment = vertical;

section.horizontalAlignment = horizontal;

//section.direction = JQCollectionViewItemsDirectionLTR;

section.items = items;

[data addObject:section];

//                }

//            }

_data = data;

}

}

}

iOS关于搜索不规则瀑布流布局的实现小结的更多相关文章

  1. Django 项目补充知识(JSONP,前端瀑布流布局,组合搜索,多级评论)

    一.JSONP 1浏览器同源策略 通过Ajax,如果在当前域名去访问其他域名时,浏览器会出现同源策略,从而阻止请求的返回 由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一 ...

  2. jsonp、瀑布流布局、组合搜索、多级评论(评论树)、Tornado初识

    1.JSONP原理剖析以及实现 1.1 同源策略限制 用django分别建立两个项目,jsonp01和jsonp02,然后再在这两个项目里分别建立一个app,比如名字叫jsonp1.jsonp2:js ...

  3. Jquery瀑布流布局

    瀑布流布局最近真的很流行,很多人都跟我一样想知道是怎么做出来的吧,经过网上搜索大量的参考结合N边的实验今天终于被我写出来了,为了便于大家理解我使用了jQuery(当然用源生js代码执行的效率会高一些, ...

  4. Xamarin自定义布局系列——瀑布流布局

    Xamarin.Forms以Xamarin.Android和Xamarin.iOS等为基础,自己实现了一整套比较完整的UI框架,包含了绝大多数常用的控件,如下图 虽然XF(Xamarin.Forms简 ...

  5. vuejs实现瀑布流布局(二)

    瀑布流布局已然完成,那么剩下的就是另一个比较大的工程了——无限加载. 之前说了,这个活动项目是基于SUI-Mobile搭建的,所以可以直接使用sui内建组件“无限加载”来实现这个功能. 没有真实的数据 ...

  6. 手摸手,带你实现移动端H5瀑布流布局

    移动端瀑布流布局是一种比较流行的网页布局方式,视觉上来看就是一种像瀑布一样垂直落下的排版.每张图片并不是显示的正正方方的,而是有的长有的短,呈现出一种不规则的形状.但是它们的宽度通常都是相同的 因为移 ...

  7. JS瀑布流布局

    好久没有更新博客喽,今天来说一个瀑布流布局. 瀑布流在很多网站已有很多,现在只说一下简单的实现原理吧, 1.计算一行可以排放几个元素 2.建立一个数组用于存放第一行的每个元素的高度. 3.得到数组中的 ...

  8. CSS3学习总结——实现瀑布流布局与无限加载图片相册

    首先给大家看一下瀑布流布局与无限加载图片相册效果图: 一.pic1.html页面代码如下: <!DOCTYPE html> <html> <head> <me ...

  9. myWaterfall - jQuery瀑布流布局插件

    myWaterfall - jQuery瀑布流布局插件 Demo http://jsfiddle.net/q3011893/p5k2ogy8/embedded/result,html,css,js/ ...

  10. jquery实现简单瀑布流布局(续):图片懒加载

    # jquery实现简单瀑布流布局(续):图片懒加载 这篇文章是jquery实现简单瀑布流布局思想的小小扩展.代码基于前作的代码继续完善. 图片懒加载就是符合某些条件时才触发图片的加载.最常见的具体表 ...

随机推荐

  1. exceptionx:灵活便捷的Python异常处理库,让异常处理更高效!

    exceptionx English | 中文 exceptionx 是一个灵活且便捷的Python异常处理库,允许你动态创建异常类,并提供多种异常处理机制. exceptionx 的前身是 gqyl ...

  2. SourceGenerator 生成db to class代码优化结果记录

    优化 上一次实验 代码写的较为随意,本次穷尽所学,优化了一把, 不过果然还是没 比过 Dapper aot, 虽然没使用 Interceptor, 但理论上其优化不该有这么大差距 知识差距不少呀,都看 ...

  3. 对比python学julia(第四章:人工智能)--(第三节)目标检测

    1.1.  项目简介 目标检测(Object Detection)的任务是在图像中找出检测对象的位置和犬小,是计算机视觉领域的核心问题之一,在自动驾驶.机器人和无人机等许多领域极具研究价值. 随着深度 ...

  4. 【FastDFS】环境搭建 03 FastDFS & Nginx整合

    FastDFS & Nginx整合: 跟踪器结合Nginx,目的是为了负载均衡和高可用,只有一台Track可以不配置Nginx 安装FastDFS-Nginx-Module到服务器上面: ta ...

  5. 再谈汤普森采样(Thompson Sampling)

    相关: [转载] 推荐算法之Thompson(汤普森)采样 [转载] 推荐系统 EE 问题与 Bandit 算法 python语言绘图:绘制一组beta分布图 转载: beta分布介绍 python语 ...

  6. 018.CentOS升级内核

    一 更新yum源 1 [root@localhost ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 2 [root@lo ...

  7. grpc断路器之sentinel 荐

    背景 为了防止下游服务雪崩,这里考虑使用断路器 技术选型 由于是springboot服务且集成了istio,这里考虑三种方案 istio hystrix sentinel 这里分别有这几种方案的对比 ...

  8. mybatis打印sql 转

    我们在使用mybatis开发过程中,经常需要打印sql以及输入输出,下面说一下mybatis结合log4j打印sql的. 1.添加mybatis配置 mybatis的日志打印方式比较多,SLF4J | ...

  9. cloud compare二次插件化功能开发详细步骤(一)

    点云处理,有一个出名的处理软件,cloud compare,简称 cc,将自己实现的功能以插件形式集成到 CC 里,方便使用 前提 环境:cc 2.13,qt 5.15,cmake 3.18,vs20 ...

  10. maven 网关应用:[NACOS ConnectException httpPost] currentServerAddr: http://localhost:8848,

    网关应用运行忽然报错:[NACOS ConnectException httpPost] currentServerAddr: http://localhost:8848, 虽然调整了代码逻辑,但是n ...