Mit dem folgenden Code können Sie die Höhe Ihres UITextView abhängig von einer festen Breite ändern (es funktioniert unter iOS 7 und der vorherigen Version):
- (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;
}
Mit dieser Funktion nehmen Sie einen NSAttributedString und eine feste Breite, um die benötigte Höhe zurückzugeben.
Wenn Sie den Rahmen aus einem Text mit einer bestimmten Schriftart berechnen möchten, müssen Sie den folgenden Code verwenden:
- (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];
}
}
Sie können dies SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO
in Ihrer prefix.pch-Datei in Ihrem Projekt wie folgt hinzufügen :
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
Sie können den vorherigen Test auch ersetzen SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)
durch:
if ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)])