這個就不多說了,直接上代碼。
一般計算方法
這個是計算文字的size的,也就是可以計算高度,也可以計算寬度。
以下方法中所有的字符串均使用self,因為使用的是NSString的category形式,這樣可以使用文字直接調(diào)用,如不符合您的需求,請自行修改為傳參方式
/**
計算文字大小(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);
}
計算帶有換行符的字符串高度
一般情況下上述的方法已經(jīng)夠用了,但是有時候服務(wù)器給的文本是帶有很多換行符\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;