這個就不多說了,直接上代碼姊途。
一般計(jì)算方法
這個是計(jì)算文字的size的涉瘾,也就是可以計(jì)算高度,也可以計(jì)算寬度捷兰。
以下方法中所有的字符串均使用self
立叛,因?yàn)槭褂玫氖?code>NSString的category
形式,這樣可以使用文字直接調(diào)用贡茅,如不符合您的需求秘蛇,請自行修改為傳參方式
/**
計(jì)算文字大小(size)
@param fontSize 文字大小
@param widht 文字寬度,如果為‘0’或者‘MAXFLOAT’或者‘CGFLOAT_MAX’顶考,該方法為計(jì)算文字寬度
@param height 文字高度赁还,如果為‘0’或者‘MAXFLOAT’或者‘CGFLOAT_MAX’,該方法為計(jì)算文字高度
@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ì)算帶有換行符的字符串高度
一般情況下上述的方法已經(jīng)夠用了驹沿,但是有時(shí)候服務(wù)器給的文本是帶有很多換行符\n
艘策,這個時(shí)候用上述的方法計(jì)算文本高度的時(shí)候就不正確了,要用到下面這個方法
/**
計(jì)算文字高度,允許換行計(jì)算
@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;
}
這個計(jì)算高度的方法里面也可以使用UILabel
渊季,方法一樣朋蔫,只是需要打開label.numberOfLines = 0;