Для UITextView
все, что вам нужно сделать, это вызвать -sizeToFit
в представлении, и оно автоматически изменит свою высоту, пока не сможет вместить весь доступный текст. Все, что вам нужно сделать, это установить ширину текстового представления, установить текст, а затем вызвать -sizeToFit
. Текстовое представление изменит свою высоту настолько, чтобы соответствовать всему тексту.
UPDATE:
Видимо, текстовые представления уменьшаются только при избыточной высоте, но не увеличиваются при недостаточной высоте для отображения всего текста. Кроме того, после вызова -sizeToFit
координата y
текстового представления сбрасывается обратно на 0.0f
. Итак, вот что вы делаете:
CGFloat textViewWidth = 300.0f;
CGFloat textViewPadding = 10.0f;
UITextView * textView = [[[UITextView alloc] init] autorelease];
textView.text = ...; // Really long string
textView.frame = CGRectMake(0.0f, 0.0f, textViewWidth, CGFLOAT_MAX);
[textView sizeToFit]; // Shrinks the height to fit all the text
textView.frame = CGRectMake(textViewPadding, textViewPadding,
textViewWidth, textView.frame.size.height);
[self.view addSubview:textView];
Во-первых, вы устанавливаете рамку так, чтобы вы могли установить ширину так, как вы этого хотите. Вы используете CGFLOAT_MAX
, чтобы в значительной степени указать бесконечную высоту. Затем, вызов -sizeToFit
уменьшает высоту до тех пор, пока она не уместится на весь текст. Однако он также сбрасывает координату y
, поэтому мы продолжаем и снова устанавливаем кадр, чтобы сконфигурировать координаты x
и y
- в этом примере 10.0f
для x
и y
-, оставляя только ширину и сохраняя высоту равной -sizeToFit
.