다음 코드를 사용하면 고정 너비에 따라 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:)])