美文网首页React Native开发经验集
关于UILabel的一个文本换行问题

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

作者: JackChen__ | 来源:发表于2016-10-11 00:51 被阅读0次

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

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

  • 这是出现bug的代码
    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的换行,我总结如下:

  • 首先,要设置commentLabel.numberOfLines = 0;
  • 其次要确定UIlabel的字体大小
  • 最终要保证UIlabel的大小能够完全显示换行后的文本。

相关文章

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/nwivyttx.html