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