iOS 使用 boundingRectWithSize:计算文字高度不准确的问题

在平时的项目开发中,我们经常会遇到文字多行显示的问题,经常我们使用的方法是: boundingRectWithSize:
具体代码:

+ (CGSize)boundingRectWithSize:(CGSize)size font:(CGFloat)font text:(NSString *)text
{
   NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
   [style setLineBreakMode:NSLineBreakByCharWrapping];
   style.alignment = NSTextAlignmentLeft;
   NSDictionary *attribute = @{ NSFontAttributeName :  FONT_SYSTEM(font), NSParagraphStyleAttributeName : style };
   text = [[text componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\r"]] componentsJoinedByString:@""];

   CGSize retSize = [text boundingRectWithSize:size
                                            options:
                     NSStringDrawingUsesLineFragmentOrigin |
                     NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine
                                         attributes:attribute
                                            context:nil].size;
return retSize;
}

这个方法在中文情况下有时可能会出现bug,因为一个中文标点符号站的是两个字符。可能存在显示是按两行显示但高度结算确只有一行的高度,就会导致计算不正确。我们可以使用LabelsizeThatFits方法:

+ (CGSize)boundingRectWithSize:(CGSize)size font:(CGFloat)font text:(NSString *)text
{
if (![UTUtility shareInstance].hightLabel) {
       [UTUtility shareInstance].hightLabel = [[UILabel alloc] init];
       [UTUtility shareInstance].hightLabel.numberOfLines = 0;
   }
   [UTUtility shareInstance].hightLabel.font = FONT_SYSTEM(font);
   [UTUtility shareInstance].hightLabel.text = text;
  CGSize retSize = [[UTUtility shareInstance].hightLabel sizeThatFits:size];
return retSize;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容