iOS UILabel高度自适应终结篇

网上大部分的boundingRectWithSizesizeWithFont 计算出来的宽高在某些有特殊情况下(如链接中有\n等等)计算出来的还是有偏差不准,此时用NSAttributedString和label的attributedText计算会迎刃而解

1.给model的.h文件添加一个NSAttributedString属性

/**    带有属性的(特殊文字会高亮显示\显示表情) */
@property (nonatomic, copy) NSAttributedString *attributedText;

 2..m重写text的set方法

//重写set
- (void)setMessageStr:(NSString *)messageStr
{
    _messageStr = messageStr;
    //计算出attributedText
    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:messageStr];
    [attrString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16] range:NSMakeRange(0, messageStr.length)];
    _attributedText = attrString;
}

3.cell.m文件

//用attributedText解决有时高度计算不准的bug
    self.contentL.attributedText = privateLetterMyModel.attributedText;

//最终计算出来的准确的size

  CGSize frame = [self.contentL.attributedText boundingRectWithSize:CGSizeMake(ScreenWidth - 120, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin context:nil].size;

4.viewController中计算cell高度

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    TestModel *model = self.dataArr[indexPath.row];

  CGSize frame = [CalculateSize sizeForNoticeTitle:model.messageStr font:[UIFont systemFontOfSize:16] maxW:  ScreenWidth - 120];
    CGSize frame = [model.attributedText boundingRectWithSize:CGSizeMake(ScreenWidth - 120, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin context:nil].size;
   
        return frame.height ;
}

5.从服务器用mdel.text获取数据(以为重写了setText方法所以会自动获取attributedText)

附加以前我的不完善的另一篇文章链接:http://blog.csdn.net/wqs1028/article/details/51205785


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值