UITextView(文本視圖)
- 父類是UIScrollView
UITextField常見屬性
// 設(shè)置文本框文字內(nèi)容
textView.text = @"文字";
// 是否可以編輯
textView.editable = NO;
根據(jù)字符串計算UITextView高度
注意:UITextView在上下左右分別有一個8px的padding何荚,如果不是采用系統(tǒng)方法(sizeThatFits,見方法1),手動計算需要將UITextView.contentSize.width減去16像素(左右的padding 2 x 8px)。同時返回的高度中再加上16像素(上下的padding),這樣得到的才是UITextView真正適應(yīng)內(nèi)容的高度刹衫。(見方法2,3)
方法一:通用(推薦)
/**
@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;
}
3.方法二: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];
// 計算文本的大小
// Size:用于計算文本繪制時占據(jù)的矩形塊
// options:文本繪制時的附加選項
// attributes:文字的屬性
// context上下文。包括一些信息讨便,例如如何調(diào)整字間距以及縮放充甚。該對象包含的信息將用于文本繪制。該參數(shù)可為nil
CGSize sizeToFit = [value boundingRectWithSize:CGSizeMake(width - 16.0,
MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
| NSStringDrawingUsesFontLeading
attributes:dic
context:nil].size;
return sizeToFit.height + 16.0;
}
4.方法三: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ù)自己的實際情況進行設(shè)置
return sizeToFit.height + 16.0;
}