这个就不多说了,直接上代码。
一般计算方法
这个是计算文字的size的,也就是可以计算高度,也可以计算宽度。
以下方法中所有的字符串均使用self
,因为使用的是NSString
的category
形式,这样可以使用文字直接调用,如不符合您的需求,请自行修改为传参方式
/**
计算文字大小(size)
@param fontSize 文字大小
@param widht 文字宽度,如果为‘0’或者‘MAXFLOAT’或者‘CGFLOAT_MAX’,该方法为计算文字宽度
@param height 文字高度,如果为‘0’或者‘MAXFLOAT’或者‘CGFLOAT_MAX’,该方法为计算文字高度
@return 返回文字的size
*/
- (CGSize)sizeWithFont:(CGFloat)fontSize textSizeWidht:(CGFloat)widht textSizeHeight:(CGFloat)height {
if (widht == MAXFLOAT || widht == CGFLOAT_MAX || widht == 0) {
CGRect rect = [self boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, height) options:NSStringDrawingTruncatesLastVisibleLine| NSStringDrawingUsesFontLeading |NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:fontSize]} context:nil];
return CGSizeMake(rect.size.width + 8, height);
} else if (height == MAXFLOAT || height == CGFLOAT_MAX || height == 0) {
CGRect rect = [self boundingRectWithSize:CGSizeMake(widht, CGFLOAT_MAX) options:NSStringDrawingTruncatesLastVisibleLine| NSStringDrawingUsesFontLeading |NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:fontSize]} context:nil];
return CGSizeMake(widht, rect.size.height + 8);
}
return CGSizeMake(0, 0);
}
计算带有换行符的字符串高度
一般情况下上述的方法已经够用了,但是有时候服务器给的文本是带有很多换行符\n
,这个时候用上述的方法计算文本高度的时候就不正确了,要用到下面这个方法
/**
计算文字高度,允许换行计算
@param fontSize 文字大小
@param widht 文字宽度
@return 返回文字的高度
*/
- (CGFloat)sizeLineFeedWithFont:(CGFloat)fontSize textSizeWidht:(CGFloat)widht {
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, widht, 0)];
textView.text = self;
textView.font = [UIFont systemFontOfSize:fontSize];
CGSize size = CGSizeMake(widht, MAXFLOAT);
CGSize constraint = [textView sizeThatFits:size];
return constraint.height;
}
这个计算高度的方法里面也可以使用UILabel
,方法一样,只是需要打开label.numberOfLines = 0;