方法一 :ios7.0之前適用
/**
@method 獲取指定寬度width,字體大小fontSize,字符串value的高度
@param value 待計(jì)算的字符串
@param fontSize 字體的大小
@param Width 限制字符串顯示區(qū)域的寬度
@result float 返回的高度
*/
- (float) heightForString:(NSString *)value fontSize:(float)fontSize andWidth:(float)width
{
CGSize sizeToFit = [value sizeWithFont:[UIFont systemFontOfSize:fontSize]
constrainedToSize:CGSizeMake(width -16.0, CGFLOAT_MAX)
lineBreakMode:NSLineBreakByWordWrapping];
//此處的換行類型(lineBreakMode)可根據(jù)自己的實(shí)際情況進(jìn)行設(shè)置
return sizeToFit.height + 16.0;
}
方法二 :ios7.0及之后適用
/**
@method 獲取指定寬度width,字體大小fontSize,字符串value的高度
@param value 待計(jì)算的字符串
@param fontSize 字體的大小
@param Width 限制字符串顯示區(qū)域的寬度
@result float 返回的高度
*/
- (float) heightForString:(NSString *)value andWidth:(float)width{
//獲取當(dāng)前文本的屬性
NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:value];
_text.attributedText = attrStr;
NSRange range = NSMakeRange(0, attrStr.length);
// 獲取該段attributedString的屬性字典
NSDictionary *dic = [attrStr attributesAtIndex:0 effectiveRange:&range];
// 計(jì)算文本的大小
CGSize sizeToFit = [value boundingRectWithSize:CGSizeMake(width - 16.0, MAXFLOAT) // 用于計(jì)算文本繪制時(shí)占據(jù)的矩形塊
options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading // 文本繪制時(shí)的附加選項(xiàng)
attributes:dic // 文字的屬性
context:nil].size; // context上下文。包括一些信息,例如如何調(diào)整字間距以及縮放。該對(duì)象包含的信息將用于文本繪制。該參數(shù)可為nil
return sizeToFit.height + 16.0;
}
注意:再前兩種方法中,UITextView在上下左右分別有一個(gè)
8px
的padding
,需要將UITextView.contentSize.width
減去16
像素(左右的padding 2 x 8px
)。同時(shí)返回的高度中再加上16
像素(上下的padding
),這樣得到的才是UITextView
真正適應(yīng)內(nèi)容的高度。如代碼中CGSizeMake(width -16.0, CGFLOAT_MAX),return sizeToFit.height + 16.0。
UILable
中則不用
方法三:通用(推薦)
/**
@method 獲取指定寬度width的字符串在UITextView上的高度
@param textView 待計(jì)算的UITextView
@param Width 限制字符串顯示區(qū)域的寬度
@result float 返回的高度
*/
- (float) heightForString:(UITextView *)textView andWidth:(float)width{
CGSize sizeToFit = [textView sizeThatFits:CGSizeMake(width, MAXFLOAT)];
return sizeToFit.height;
}
補(bǔ)充:
在UITableView
中,設(shè)置cell
的動(dòng)態(tài)高度,也可以使用第三種方法來進(jìn)行設(shè)置。
1、先在定義一個(gè)UILabel
的變量(全局的),不往視圖上放。
2、給此變量進(jìn)行賦值,并計(jì)算計(jì)算高度。
3、重復(fù)第二個(gè)操作