以下設置針對 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;
效果如下,居然將所有的文字全部都顯示出來了...........
這是什么原理???
以上為自己測試結果,如有不正確地方,還請大家不吝賜教。