获取字符串的宽度和高度
1 //1.获取字符串的宽度 2 -(float) widthForString:(NSString *)value fontSize:(float)fontSize andHeight:(float)height 3 { 4 CGSize sizeToFit = [value sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:CGSizeMake(CGFLOAT_MAX, height) lineBreakMode:NSLineBreakByWordWrapping];//此处的换行类型(lineBreakMode)可根据自己的实际情况进行设置 5 return sizeToFit.width; 6 } 7 8 9 //2.获得字符串的高度 10 -(float) heightForString:(NSString *)value fontSize:(float)fontSize andWidth:(float)width 11 { 12 //之前的写法 13 14 CGSize sizeToFit = [value sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:CGSizeMake(width, CGFLOAT_MAX) lineBreakMode:NSLineBreakByCharWrapping];//此处的换行类型(lineBreakMode)可根据自己的实际情况进行设置 15 16 /* 17 //现在的写法 18 19 NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init]; 20 [style setLineBreakMode:NSLineBreakByCharWrapping]; 21 22 NSDictionary *attributes = @{ NSFontAttributeName : [UIFont systemFontOfSize:10], NSParagraphStyleAttributeName : style}; 23 24 [value boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil]; 25 26 */ 27 28 return sizeToFit.height; 29 30 31 }
存在不足的地方:
boundingRectWithSize: 方法只是取得字符串的size, 如果字符串中包含\n\r 这样的字符,也只会把它当成字符来计算。但放到UITextView中来解析时,会把它变成回车换行符,那么在显示时就会多出一行的高度出来。
而且,使用stringWithFormat才会忽略\n,使用@“”形式不会。
矬点的做法,大体的实际高度 = boundingRectWithSize计算出来的高度 + \n\r出现的次数 * 单行文本的高度