React Native开发经验集

关于UILabel的一个文本换行问题

2016-10-11  本文已影响0人  JackChen__

今天晚上做了个关于富文本的小练习,期中遇到了一个小bug,但是就是这个bug让我费了好久才找到原因。下面结合代码来说明这个bug为什么会出现(知道原因当然就知道怎么解决了。。。哈哈哈)。

本文章代码由xcode7.2,在iOS9.2环境下运行

    NSMutableAttributedString *mAttStr = [[NSMutableAttributedString alloc] initWithString:(NSString *)mString];
    UILabel *commentLabel = [[UILabel alloc] initWithFrame:commentLabel1.frame];
    commentLabel.numberOfLines = 0;
    NSRange fromRange = [mString rangeOfString:fromStr];
    NSRange toRange = [mString rangeOfString:toStr];
    [mAttStr addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:fromRange];
    [mAttStr addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:toRange];
    commentLabel.attributedText = mAttStr;

运行结果如下图所示

imgimg

有人说了,应该加上换行模式。但是UILabel的默认换行模式就是NSLineBreakByWordWrapping。然而,经过测试,即便加上换行模式也无法实现换行。
后来我将此问题暂搁,根据效果图设置其他属性,当我在commentLabel.numberOfLines = 0;下加了一行代码commentLabel.font = [UIFont systemFontOfSize:13.0];后,换行效果奇迹的实现了。
如下图所示:

imgimg

经过分析,UIlabel文本换行跟字体大小有关,下面为从网上查找的资料:

  1. 获取UILabel的frame大小
  2. 获取UILabel的字体大小
  3. 获取UILabel的文本内容
  4. 根据上面的3部分数据,计算文本显示区域大小
  5. 根据4计算的大小,实时改变UILabel的frame

至此,我对我的bug做了总结:
首先,我的label的大小是确定了的;
其次,我并没有对UIlabel的字体进行明确设置,而UIlabel的默认中文字体大小是17,如果换行的话,会超过label的大小。

总结

经过自己的测试和网上的资料,关于UIlabel的换行,我总结如下:

上一篇 下一篇

猜你喜欢

热点阅读