NSAttributedString 动态计算字符串的高度ios6,7

该博客介绍了如何在iOS应用中,特别是针对ios6和7的环境下,使用NSAttributedString来动态计算字符串在固定宽度下的高度。提供了一种准确的方法来处理这种计算需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:

根据字符口串长度,给定固定宽度,计算字符串所需的高度;比较准确;

#define CELL_CONTENT_MARGIN 10
#define KLEFT_MARGIN 8.F
#define KFONT_SIZE 19.f
- (CGFloat)tableView:tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

    NSString *contentText = [[hisTodayArr objectAtIndex:indexPath.row+1] valueForKey:KCONTENT_KEY];
    CGSize constraint = CGSizeMake(hisTodayTab.frame.size.width - KLEFT_MARGIN - (CELL_CONTENT_MARGIN * 2), 9999.0f);
    NSDictionary * attributes = [NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:KFONT_SIZE] forKey:NSFontAttributeName];
    NSAttributedString *attributedText =
    [[NSAttributedString alloc]
     initWithString:contentText
     attributes:attributes];
    CGRect rect = [attributedText boundingRectWithSize:constraint
                                               options:NSStringDrawingUsesLineFragmentOrigin
                                               context:nil];
    CGSize size = rect.size;
    return MAX(size.height + 2*CELL_CONTENT_MARGIN, 44.0f);
}

下面这种是ios7出来之前的,ios7出来后就duplicate(建义不要再使用);本人测试过,当ios6和ios7出来的尺寸效果不同;

#define KTOP_MARGIN 5
#define KLAB_LAB_INTERVAL 5
#define KBOTTOM_MARGIN 5
#define KDETAIL_LAB_HEIGHT 18

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
//    CGFloat labelWidht = bgView.frame.size.width - KIMAGEVIEW_WIDTH - KLAB_IMG_INTERVAL;
    NSString *tmp = [[videoArray objectAtIndex:indexPath.section] valueForKey:BF_VIDEO_TITLE];
    CGSize textSize =[tmp sizeWithFont:[UIFont systemFontOfSize:14.f] constrainedToSize:CGSizeMake(280.f, 60.f) lineBreakMode:NSLineBreakByCharWrapping];
    
    return (KTOP_MARGIN + textSize.height + KLAB_LAB_INTERVAL + KDETAIL_LAB_HEIGHT + KBOTTOM_MARGIN);

    
//    return 72.0f;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值