【转】iOS,搜索标签布局

前一阵时间,看过这样一个demo,代码不多,但是简洁易懂。

转自:

//  代码地址: https://github.com/iphone5solo/PYSearch

//  代码地址: http://www.code4app.com/thread-11175-1-1.html

/**  添加和布局标签 */
- (NSArray *)addAndLayoutTagsWithTagsContentView:(UIView *)contentView tagTexts:(NSArray<NSString *> *)tagTexts;
{
    // 清空标签容器的子控件
    [contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    // 添加热门搜索标签
    NSMutableArray *tagsM = [NSMutableArray array];
    for (int i = 0; i < tagTexts.count; i++) {
        UILabel *label = [self labelWithTitle:tagTexts[i]];
        [label addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tagDidCLick:)]];
        [contentView addSubview:label];
        [tagsM addObject:label];
    }

    // 计算位置
    CGFloat currentX = 0;
    CGFloat currentY = 0;
    CGFloat countRow = 0;
    CGFloat countCol = 0;

    // 调整布局
    for (UILabel *subView in tagsM) {
        // 当搜索字数过多,宽度为contentView的宽度
        if (subView.py_width > contentView.py_width) subView.py_width = contentView.py_width;
        if (currentX + subView.py_width + PYMargin * countRow > contentView.py_width) { // 得换行
            subView.py_x = 0;
            subView.py_y = (currentY += subView.py_height) + PYMargin * ++countCol;
            currentX = subView.py_width;
            countRow = 1;
        } else { // 不换行
            subView.py_x = (currentX += subView.py_width) - subView.py_width + PYMargin * countRow;
            subView.py_y = currentY + PYMargin * countCol;
            countRow ++;
        }
    }
    // 设置contentView高度
    contentView.py_height = CGRectGetMaxY(contentView.subviews.lastObject.frame);
    // 设置头部高度
    self.baseSearchTableView.tableHeaderView.py_height = self.headerContentView.py_height = CGRectGetMaxY(contentView.frame) + PYMargin * 2;
    // 重新赋值, 注意:当操作系统为iOS 9.x系列的tableHeaderView高度设置失效,需要重新设置tableHeaderView
    [self.baseSearchTableView setTableHeaderView:self.baseSearchTableView.tableHeaderView];
    return [tagsM copy];
}

/** 添加标签 */

- (UILabel *)labelWithTitle:(NSString *)title

{

UILabel *label = [[UILabel alloc] init];

label.userInteractionEnabled = YES;

label.font = [UIFont systemFontOfSize:12];

label.text = title;

label.textColor = [UIColor grayColor];

label.backgroundColor = [UIColor py_colorWithHexString:@"#fafafa"];

label.layer.cornerRadius = 3;

label.clipsToBounds = YES;

label.textAlignment = NSTextAlignmentCenter;

[label sizeToFit];

label.py_width += 20;

label.py_height += 14;

return label;

}

时间: 2024-12-26 11:49:33

【转】iOS,搜索标签布局的相关文章

IOS中标签视图和Block

标签视图控制器 - UITabBarController 自定义UITabBarItem 自定义导航栏和标签栏背景图片 三个视图控制器的综合使用 一. 标签视图控制器  UITabBarController UITabBarController有以下重要属性 viewControllers   显示的视图控制器 tabBar                  标签栏 delegate                协议 tabBar 是 UITabBar对象, 包含多个UITabBarItem,

《IT蓝豹》高仿花田ios版标签移动效果

高仿花田ios版标签移动效果,长按每一个item拖动到自己想要位置后,后面位置移动补全效果 .本项目适合研究gridview拖拽效果的朋友下载.学习android动画特效.本项目主要靠DragGrid来实现,/** 在拖动的情况 */    private void onDrag(int x, int y , int rawx , int rawy) {        if (dragImageView != null) {            windowParams.alpha = 0.6

include标签布局和自定义标题

在Android的性能优化是,可以使用抽象布局标签(include,ViewStub,merge),include去除不必要的嵌套和View节点,merge减少不必要的inflate以及其他Layout,viewstub可以隐藏view. include标签常用于将布局中的公共部分提取出来供其他layout公用,以实现布局模块化,这在布局编写方便提供了便利. activity_main.xml <Linear xmlns:android="http://schemes.android.co

iOS 主流搜索界面下的Tag标签布局框架,各种样式任君挑选,包您满意(SKTagView)

每个App的搜索界面下边都会有热门搜索,历史搜索之类的标签,这里介绍个框架, 既可以非常容易实现标签类的不规则流式布局,也可以实现固定宽度和高度的布局,也 支持Autolayout,使用起来也是非常舒服.SKTagView原框架下只有根据文字宽度不固 定的的模式,那么如果需求有固定宽高模式的,老规矩,只能改源码了. 请看图: 传统模式: TableView cell模式的不规则模式和固定宽高模式:     电影放完了,开始简单介绍下 这里有两个能用到的地方(截图来自淘宝)     OK,根据以上

iOS --- 搜索框UISearchController的使用(iOS8.0以后替代UISearchBar + UISearchDisplayController的组合)

在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISearchDisplayController的组合方式. 添加UISearchController属性: @property(strong, nonatomic) UISearchController *searchController; @property(strong, nonatomic) NS

TODO:Laravel 使用blade标签布局页面

本文主要介绍Laravel的标签使用,统一布局页面.主要用到到标签有@yield,@ stack,@extends,@section,@stop,@push.使代码精简.提高页面下载速度.表现和内容相分离.站在开发者的角度看,web页面都可以提取相同的内容进行分离,让每个页面代码尽显主题内容,简洁明快,干扰信息少. 1. Laravel的blade标签代码格式是"命名.blade.php",这样是不是很简洁. 2. 创建统一布局风格的代码模板main.blade.php,使用HTML5

HTML &lt;!DOCTYPE&gt; 标签 布局引用的几种方法 行级元素与块级元素

HTML <!DOCTYPE> 标签 <!DOCTYPE html> <html> <head> <title>文档的标题</title> </head> <body> 文档的内容...... </body> </html> <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前. <!DOCTYPE> 声明不是 HTM

iOS 自己主动布局教程

springs和struts的问题 你肯定非常熟悉autosizing masks-也被觉得是springs&struts模式.autosizing mask决定了当一个视图的父视图大小改变时,其自身须要做出什么改变.它有一个灵活的或固定不变的margins(struts)吗?它的宽和高要做出什么改变(springs)? 举个样例,一个宽度灵活的视图,假设其父视图边框,那么它也会对应的变宽.一个视图右边拥有固定的margin,那么它的右边缘将会一直粘住其父视图的右边缘. autosizing系统

iOS StoryBoard自适应布局

原文地址:点击打开链接 通用的Storyboard 通用的stroyboard文件是通向自适应布局光明大道的第一步.在一个storyboard文件中适配iPad和iPhone的布局在iOS8中已不再是梦想.我们不必再为不同尺寸的Apple移动设备创建不同的storyboard文件,不用再苦逼的同步若干个storyboard文件中的内容.这真是一件美好的事情. 我们打开Xcode,新建一个项目: 选择iOS\Application\Single View Application创建一个单视图应用: