以下设置针对 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;
效果如下,居然将所有的文字全部都显示出来了...........
这是什么原理?😔
以上为自己测试结果,如有不正确地方,还请大家不吝赐教。
网友评论