搜索历史堆砌效果的实现

先看一下效果图,方便理解:

                              

想实现如上图的历史堆砌效果,如果仅仅使用原生的UICollectionView,会发现例如第一行的“海上钢琴师”两侧的空白会均分,非常影响美观。因此,我们需要对UICollectionView的流布局配置文件进行自定义的操作,来实现九宫格的格间距固定。代码如下:

首先进行自定义类的创建:

@interface JHCustomFlow : UICollectionViewFlowLayout

然后重写父类中的布局计算方法:

/**

*  重写当前方法 实现控制item最大间距

*

*  @param rect 绘图范围

*

*  @return item属性数组

*/

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

NSArray *attributes = [[super layoutAttributesForElementsInRect:rect] mutableCopy];

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

if (i==0) {

UICollectionViewLayoutAttributes *currentLayoutAttributes = attributes[i];

CGRect frame                                              = currentLayoutAttributes.frame;

frame.origin.x                                            = 10;

currentLayoutAttributes.frame                             = frame;

continue;

}

//当前attributes

UICollectionViewLayoutAttributes *currentLayoutAttributes = attributes[i];

//上一个attributes

UICollectionViewLayoutAttributes *prevLayoutAttributes    = attributes[i - 1];

//我们想设置的最大间距,可根据需要改

NSInteger maximumSpacing                                  = 5;

//前一个cell的最右边

NSInteger origin                                          = CGRectGetMaxX(prevLayoutAttributes.frame);

//如果当前一个cell的最右边加上我们想要的间距加上当前cell的宽度依然在contentSize中,我们改变当前cell的原点位置

//不加这个判断的后果是,UICollectionView只显示一行,原因是下面所有cell的x值都被加到第一行最后一个元素的后面了

if(origin + maximumSpacing  + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width) {

CGRect frame                  = currentLayoutAttributes.frame;

frame.origin.x                = origin + maximumSpacing;

currentLayoutAttributes.frame = frame;

}else{

CGRect frame                  = currentLayoutAttributes.frame;

frame.origin.x                = 5;

currentLayoutAttributes.frame = frame;

}

}

return attributes;

}

将该方法实现完毕后,使用刚刚自定义的布局文件来布局:

/* 自定义布局格式 */

JHCustomFlow *flow              = [[JHCustomFlow alloc] init];

flow.minimumLineSpacing         = 5;

flow.minimumInteritemSpacing    = 5;

/* 初始化流布局视图 */

_collectionView                 = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:flow];

_collectionView.dataSource      = self;

_collectionView.delegate        = self;

_collectionView.backgroundColor = [UIColor whiteColor];

[self addSubview:_collectionView];

/* 提前注册流布局item */

[_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];

最终效果如上图

时间: 2024-10-20 02:09:55

搜索历史堆砌效果的实现的相关文章

07.everything的搜索历史按照搜索时间排序

需求:everything的搜索历史按照搜索时间排序;(现在是按搜索次数排序的) "Sun Jun 23, 2013 8:14 am"的时候作者就说: Sorting search history by last search date in Everything is on my Things to do list. 但是看了更新日志,翻了菜单,并没有找到相关设置; www.voidtools.com ? View topic - When does Everything saves

Extjs combobox 实现搜索框的效果

目的:使用combobox实现一个类似搜索框的效果,即用户输入内容后,出现相关下列列表,提供选择. 实现:extjs3 中combobox自身带这个功能. 需要设置的属性: 1. hideTrigger: true, // 去掉右侧的小标志 2. mode : 'remote', // 数据需要远程下载 3. minChars:2, // 设置用户输入字符多少时触发查询 4. queryParam: 'userinput', // 设置用户传递参数的名称,默认是 ‘query’ store的定义

Android:控件AutoCompleteTextView 客户端保存搜索历史自动提示

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:ori

搜索历史提示的关闭

最近使用百度搜时间总是出现搜索历史的提示,很烦,就比如曾经搜过chrome下载你只要下次输入chrome就会在下面出现你搜索的记录. 为了关闭这个功能在chrome中找遍了设置,比如表单.历史记录.搜索设置了很多,完全没用,疯狂上网查都找不到一个靠谱的解法,后来突然发现这好像跟chrome没有什么关系,应该是百度的功能,然后向右上方以看,果然一个硕大的搜索设置在那里---- 其实写这个并不是为了记录什么,只是想写一些随笔,记录一些事情,毕竟快要论文查重了我还没写呢,有些方张. 百度镇 原文地址:

vue-music 关于搜索历史本地存储

搜索历史 搜索过的关键词 保存在本地存储 localstorage 中,同时多个组件共享搜索历史数据,将数据存到vuex 中,初始值从本地缓存中取得对应key 的值,没有数据默认为空数组 点击搜索关键词列表值的时候触发将关键词写入vuex 中,搜索结果列表suggest 组件向外派发事件,在需要渲染搜索历史列表的组件接受派发的事件提交actions 保存结果 封装actions 方法saveSearchHistory 提交commit 将 创建cache.js 在提交之前把关键词存放到本地存储中

vue-music 关于Search(搜索页面)-- 搜索历史

搜索历史展示每一次搜索过,并选中的关键字,保存数据到数组.搜索历史数据是需要在多个组件中共享的,所以保存在vuex 中 searchHistory 数组中,保存触发在搜索列表点击选中之后派发事件到search.vue 中,search.vue 监听事件并提交actions改变共享数组,改变vuex 中共享数据之前需要存到本地缓存 Localstorage 中,在本地存储 中判断如果当期历史搜索数据在数据中已经有则提前插入到第一位,没有则添加到数组中存储 在common 中 创建cache.js

php实现搜索和分页效果-亲测有效

php搜索+分页,单写容易,组合起来不容易,网上找了一下,代码不全,搜索和分页没有完全实现,经过自己的修改尝试,成功实现简单的搜索+分页功能. 效果如下: 下面是完整的代码!写在一个php页面里面即可!所需要做的修改就是你的数据库信息和表信息.即可实现上面图片同样的效果!感谢网上分享的网友,我在此基础上改出了自己想要的功能,因此也贴出来,想对有些朋友有帮助. <?php$wherelist=array();$urlist=array();if(!empty($_GET['id'])){$wher

搜索菜单栏侧滑效果控件SearchView

本人视频教程系类   iOS中CALayer的使用 效果1: 效果2: 项目中用到的图片 [email protected]: 源码: SearchView.h + SearchView.m // // SearchView.h // SearchView // // Created by YouXianMing on 14/12/25. // Copyright (c) 2014年 YouXianMing. All rights reserved. // #import <UIKit/UIKi

仿百度搜索提示框效果

<!doctype html><html><head> <meta charset="UTF-8"> <title>百度搜索提示框</title> <style> * { margin: 0;padding: 0; outline: none;} .search101 { width: 650px; margin: 300px auto; font-size: 0; } .sou1 { width: 5