美文网首页
label不使用系统字体 boundingRectWithSi

label不使用系统字体 boundingRectWithSi

作者: 十二月的水瓶座 | 来源:发表于2017-06-02 17:04 被阅读141次

    以下设置针对 Helvetica 字体有效(其他字体可自行测试).  如果小伙伴使用的是系统字体[UIFont systemFontOfSize:16] ,则不需要这样设置,就能正确计算高度,并正确显示.

    我们在开发动态计算文字的高度,是经常遇到的需求. 

    一般的,大家现在应该都是采用 boundingRectWithSize:options:attributes:context: 这个方法来计算文字高度.

    我不知道大家有没有遇到这样的情况,明明高度计算是出来是准确的但是有的时候文字就是显示不全.

    UILabel * lab= [[UILabelalloc]init];

    [lab setTextColor:WMH_COLOR_normal(102,102,102)];

    lab.font= [UIFontfontWithName:@"Helvetica"size:16];

    [lab setBackgroundColor:[UIColor redColor]];

    lab.numberOfLines=0;

    lab.lineBreakMode=NSLineBreakByWordWrapping;

    lab.text=@"你哦啊发hi哦啊回复哦啊花覅和覅见覅哦啊覅阿富汗爱哦阿佛年后啊hi安排及哦啊跑机票哈佛爱好佛啊福哦啊";

    // CONTENTSIZEX 为屏幕宽度

    CGFloat height = [lab.text boundingRectWithSize:CGSizeMake(CONTENTSIZEX-132,CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:[NSDictionarydictionaryWithObjectsAndKeys:[UIFontfontWithName:@"Helvetica"size:16] ,NSFontAttributeName,nil] context:nil].size.height;

    //设置 label的高度

    [lab setFrame:CGRectMake(15,6,CONTENTSIZEX-132, height)];

    显示效果如下: (关注 红色部分)  可以明显看出text 显示应该需要四行,但是现在只显示了三行,不过你看红色部分的高度,确实是四行文字的高度.  这样的效果 我能怎么办,我也很绝望啊~

    但是,如果你把字体大小设置为需要的字体大一号, 我这里需要设置为17,再来计算显示 

    CGFloat height = [lab.text boundingRectWithSize:CGSizeMake(CONTENTSIZEX-132,CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:[NSDictionarydictionaryWithObjectsAndKeys:[UIFontfontWithName:@"Helvetica"size:17] ,NSFontAttributeName,nil] context:nil].size.height;

    效果如下,居然将所有的文字全部都显示出来了...........

    这是什么原理?😔

    以上为自己测试结果,如有不正确地方,还请大家不吝赐教。

    相关文章

      网友评论

          本文标题:label不使用系统字体 boundingRectWithSi

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