使用以下代码,您可以根据固定宽度更改 UITextView 的高度(它适用于 iOS 7 和以前的版本):
- (CGFloat)textViewHeightForAttributedText:(NSAttributedString *)text andWidth:(CGFloat)width
{
UITextView *textView = [[UITextView alloc] init];
[textView setAttributedText:text];
CGSize size = [textView sizeThatFits:CGSizeMake(width, FLT_MAX)];
return size.height;
}
使用此函数,您将获取一个 NSAttributedString 和一个固定宽度来返回所需的高度。
如果你想从你的特定字体的文本中计算框架,需要使用下面的代码:
- (CGSize)text:(NSString *)text sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
{
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
CGRect frame = [text boundingRectWithSize:size
options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName:font}
context:nil];
return frame.size;
}
else
{
return [text sizeWithFont:font constrainedToSize:size];
}
}
您可以将 SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO 添加到项目中的 prefix.pch 文件中:
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
您也可以将之前的测试SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)替换为:
if ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)])