Простого решение
- (void)textViewDidChange:(UITextView *)textView
{
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
textView.frame = newFrame;
}
С помощью этого следующего кода, вы можете изменить высоту вашего UITextView в зависимости от фиксированной ширины (он работает на прошивке 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 ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)])
{
CGRect frame = [text boundingRectWithSize:size
options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName:font}
context:nil];
return frame.size;
}
else
{
return [text sizeWithFont:font constrainedToSize:size];
}
}
Это работало для меня iOS6 и 7:
CGSize textViewSize = [self.myTextView sizeThatFits:CGSizeMake(self.myTextView.frame.size.width, FLT_MAX)];
self.myTextView.height = textViewSize.height;
вы можете проверить размер текста. поэтому при уменьшении размера текста уменьшите UITextView. – Mehul