ios6, ios7上文字长度计算问题, 可变长文字的自动适配显示

最新遇到一个问题,需要显示一个可变长度的文本文字。 通常我们会先计算这部分文字需要显示出来的高度值,然后把这个高度值设置成UITextView的高度值。这样就做到了自动适配显示。

1. 之前我们是采用网上说的那种方式, 

+ (float) heightForTextView: (UITextView *)textView WithText: (NSString *) strText{
    float fPadding = 16.0; // 8.0px x 2
    CGSize constraint = CGSizeMake(textView.contentSize.width - fPadding, CGFLOAT_MAX);

    CGSize size = [strText sizeWithFont: textView.font constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

    float fHeight = size.height + 16.0;

    return fHeight;
}

结果发现在ios6上计算出的长度根本不对, 会致使有一部分文字显示不出来的情况。但在ios7上上面这部分代码是正确的。注:ios6, ios7对同样的文字内容,即使使用的是相同的文字大小,计算出来的高度也是不一样的。

注:今天发现, 上面这个方法在真机上是正常的,在XCode 5的模拟器上ios6上会有问题。 这应该是XCode 5的ios6模拟器的一个bug, 供各位参考


2. 后来自己再尝试了一番, 终于找到一个好的办法来解决这个问题。(个人觉得下面这种方法比较赞,下面这种方法不需要考虑上面方法中的 UITextView的 8 padding问题,相对比较容易理解)

+ (float) heightForString:(NSString *)value fontSize:(float)fontSize andWidth:(float)width

{

    UITextView *detailTextView = [[UITextViewalloc]initWithFrame:CGRectMake(0, 0, width, 0)];

    detailTextView.font = [UIFontsystemFontOfSize:fontSize];

    detailTextView.text = value;

   CGSize deSize = [detailTextViewsizeThatFits:CGSizeMake(width,CGFLOAT_MAX)];

   return deSize.height;

}

自己测试使用过, ios6, ios7上均能计算出正常的值, 虽然同样的内容,同样的文字大小,计算出来的高度还是不一样。

3. 在网上查了一下, 有的说是用UILabel试一下,   配合CGSize size = [strText sizeWithFont: textView.font constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; 这种方式也可以得正常的显示值, (注意:在使用UILabel来时,计算文字高度时, 不需要像上面第一部分代码中搞一个8 padding)

经验证:

sizeWithFont这个方法貌似确实是针对UILabel的,如果用UILabel来显示,其计算出来的高度和实际高度是吻合的。但是需要注意的是UILabel的文字内容和UILabel的宽度几乎是重合的,这会让人觉得文字太过于帖边了,可以考虑设置其contentInset之类来处理,不过这个是另一个问题了。而UITextView则不会太帖边,且行间距较大,适合显示。 估计UILabel应该也可以设置其行间距和段间距的。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值