OC中计算文本高度的方法有以下几种:
1.利用NSString的sizeWithFont:constrainedToSize:lineBreakMode:计算
(该方法在iOS7.0以上已经废弃),代码如下:
size = [text sizeWithFont:[UIFontsystemFontOfSize:fontSize] constrainedToSize:CGSizeMake(maxWidth,MAXFLOAT) lineBreakMode:NSLineBreakByCharWrapping];//折行方式
2.利用NSString的boundingRectWithSize:options:attributes:context:计算
该方法为iOS7.0以上新增方法,代码如下:
CGSize textSize;
NSStringDrawingOptions option = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading;
//NSStringDrawingTruncatesLastVisibleLine如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号。 如果指定了NSStringDrawingUsesLineFragmentOrigin选项,则该选项被忽略 NSStringDrawingUsesFontLeading计算行高时使用行间距。(注:字体大小+行间距=行高)
NSDictionary *attributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
CGRect rect = [self boundingRectWithSize:size
options:option
attributes:attributes
context:nil];
//经测试,向上取整可以减少误差
textSize.height = ceilf(rect.size.height);
textSize.width = ceilf(rect.size.width);
由于我现在的项目只需要适配8以上的,所以就封装了一个扩展,方便调用,地址如下:
NSString+Size
参考文章:
http://blog.csdn.net/hanhailong726188/article/details/42327725
http://blog.csdn.net/jymn_chen/article/details/10949279
http://blog.csdn.net/hello_hwc/article/details/46731991