如何根据字数多少获取字符串对应高度

本文介绍了一种自适应调整TableView行高的方法,通过计算文本显示的高度和图片实际高度来确保每行内容都能完美展示,适用于微博浏览或空间动态等功能。

这种方法一般用于tableview,制作类似于微博浏览,空间展示动态的功能。表的高度根据图片以及字符串字数确定。


通过文字展示的最大宽度以及文字字体大小确定文字展示的高度

- (CGRect)getHeightOfText:(NSString *)text width:(CGFloat)width font:(UIFont *)font{
    /*
     width:设定的字符串展示的宽度
     font :字符的字体大小
     */
    
    CGRect rect = [text boundingRectWithSize:CGSizeMake(width, 0) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font} context:nil];
    
    
    /*
     字符串对应高度
     float aHeifht = rect.size.height;
     
     字符串对应宽度
     float aWidth = rect.size.width;
     */
    
    return rect;
}


根据需要展示的图片高度或者文字高度自适应表行高

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    if (文字内容){
        NSString *text = [NSString stringWithFormat:@"\t%@",需要展示的文字];
        CGRect rect = [self getHeightOfText:text width:300 font:[UIFont systemFontOfSize:14]];
        return rect.size.height+10;
    }else//展示图片
    {
        return [[图片 objectForKey:@"height"] integerValue]+10;//获取服务器中图片高度,为了美观都比原始高多10
    }
}


设置cell内容

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NewsDetailCell *cell = [tableView dequeueReusableCellWithIdentifier:@"data"];
    NSDictionary *content = [_dataArray objectAtIndex:indexPath.row];
    if ([[content objectForKey:@"data_type"] intValue] == 1) {
        //文本
        NSString *text = [NSString stringWithFormat:@"\t%@",[content objectForKey:@"content"]];
        cell.txtLabel.text = text;
        CGRect rect = [CommonTool getHeightOfText:text width:300 font:[UIFont systemFontOfSize:14]];
        cell.txtLabel.frame = CGRectMake(10, 5, rect.size.width, rect.size.height);
    }else{
        //图片
        NSString *urlString = [NSString stringWithFormat:@"%@%@",SERVER_ADDRESS,[[content objectForKey:@"image"] objectForKey:@"source"]];
        [cell.newsImageView setImageWithURL:[NSURL URLWithString:urlString]];
        cell.newsImageView.frame = CGRectMake(10, 5, 300, [[[content objectForKey:@"image"] objectForKey:@"height"] integerValue]);
    }
    return cell;
}





古诗的每一句都是水平书写的,但我们需要将其转换成垂直且从右到左书写的格式。 输入是一个字符串列表,每个字符串代表古诗的一句。 输出是一个整体字符串,按指定格式排列。 分析输入: 输入的 poem 是一个列表,每个元素是一个字符串,代表古诗的一句。 需要确定每句诗的最大长度,因为这将决定最终输出字符串的垂直高度。 计算最大长度: 遍历 poem 列表,找到最长的句子,记录其长度。 这个长度将决定输出字符串的列数(垂直方向上的字符数量)。 构建输出字符串: 创建一个空列表 output_lines,用于存储每一行的字符。 遍历 poem 中的每一句诗,对于每一句诗,再遍历其每一个字符,按照从右到左的顺序添加到 output_lines 中。 注意,由于是从右到左,因此需要反转每一句诗。 每一行字符填满后,开始新的一行。 处理边界条件: 如果某些句子长度不足最大长度,需要用空格补齐,以保持垂直对齐。 每一行字符数量达到最大长度后,开始新的一行。 合并输出字符串: 将 output_lines 列表中的每一行字符合并成一个字符串,行与行之间用换行符分隔。 返回结果: 返回合并后的字符串。 具体步骤细化 遍历 poem 列表: 使用 max 函数和 len 函数,找到最长的句子。 初始化输出列表: 创建一个空列表 output_lines,用于存储处理后的字符。 逐句处理: 对于 poem 中的每一句诗,反转字符串。 按照最大长度,将字符依次添加到 output_lines 中,不足的部分用空格补齐。 合并字符: 使用 ''.join() 方法将 output_lines 列表中的字符合并成一个字符串。 返回结果: 返回合并后的字符串。 通过以上步骤,我们可以完成 print_poem 函数,使其能够将输入的古诗列表按照从右到左、从上到下的方式转换成一个新的字符串,并返回该字符串。 poem = [ "日照香炉生紫烟", "遥看瀑布挂前川", "飞流直下三千尺", "疑是银河落九天" ] def poem_print(poem): pass print(poem_print(poem)) 输出内容: 疑飞遥日 是流看照 银直瀑香 河下布炉 落三挂生 九千前紫 天尺川烟
最新发布
05-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值