处理数据源(根据条目字数多少 ,动态显示一行里有多少个条目,类似天猫搜索历史)

Posted 偶阵雨ss33

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理数据源(根据条目字数多少 ,动态显示一行里有多少个条目,类似天猫搜索历史)相关的知识,希望对你有一定的参考价值。

原理:处理数据源

1.计算条目一的字符串所占宽度

#import "NSString+Extension.h"  //NSString 分类(添加新功能:根据字号计算字符串宽度)

#pragma mark -根据字号来计算字符串的宽度

- (float) widthWithFont: (UIFont *) font{

    CGRect textRect = [self boundingRectWithSize:CGSizeMake(MAXFLOAT, font.pointSize)                 options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading

                                      attributes:@{NSFontAttributeName:font}

                                         context:nil];

    return ceil(textRect.size.width);

}

2.加上“   ”中间一段空格的宽度

3.再加上条目二字符串的宽度

4.如果宽度超过屏幕宽度,则将数据换到下一行中(flag = 0;)数据源单条数据从新开始拼接多个条目

 

-(void)testDealDataSource{

        NSArray * dataArray = @[@"全面面包(100g)",@"全面面包(200g)",@"秘制红烧肉(300g)",@"全面面包(400g)",@"蜜汁红烧排骨(500g)"];

//    NSArray * dataArray = @[@"面包(100g)",@"面包(200g)",@"红烧肉(300g)",@"全面面包(400g)",@"蜜汁红烧排骨(500g)"];

    

    NSMutableArray * realDataArray = [NSMutableArray array];

    NSMutableString * mustr = [NSMutableString string];

    NSInteger flag = 0;

    NSString * intervalStr = @"     ";

    CGFloat interval = [intervalStr widthWithFont:[UIFont systemFontOfSize:13]];

    for(int i = 0; i < dataArray.count; i++){

        NSString * sr = dataArray[i];

        CGFloat width = [sr widthWithFont:[UIFont systemFontOfSize:13]];

        CGFloat widthTotal = [mustr widthWithFont:[UIFont systemFontOfSize:13]];

        if(JYEScreenWidth - (width + interval + widthTotal) > 0.001 && flag <= 2){

            if(i != 0){

                [mustr appendString:intervalStr];

            }

            flag ++;

            [mustr appendString:sr];

        }else{

            flag = 0;

            [realDataArray addObject:mustr];

            mustr = [NSMutableString string];

            [mustr appendString:sr];

        }

        if(i == dataArray.count - 1){

            [realDataArray addObject:mustr];

        }

    }

    self.dataSourceArray = realDataArray;

    [self.tableView reloadData];

    for(NSString * object in realDataArray){

        NSLog(@"%@",object);

    }  

}

 

以上是关于处理数据源(根据条目字数多少 ,动态显示一行里有多少个条目,类似天猫搜索历史)的主要内容,如果未能解决你的问题,请参考以下文章

关于文本框字数的限制以为动态显示剩余字数

怎样根据数据库里的数据自动生成Table

CSS如何限制显示的文本字数

Java后台传到前台的数据,在table里面怎么将相同的td合并成一行。数据是动态的,不确定有多少条

fastreport 如何根据字数的多少控制字体的

tkinter:动态创建和删除条目