Существует ли эквивалент метода NSString sizeWithFont:, который можно использовать для вычисления высоты текста в UITectView для заданной ширины? Все методы из NSString работают только на одной строке, что я могу сказать.
NSString sizeWithFont: для нескольких строк?
Ответ 1
В ссылка Apple для этих методов NSString вы можете использовать -sizeWithFont:constrainedToSize: или -sizeWithFont:constrainedToSize:lineBreakMode: для "Вычисления метрик для нескольких строк текста".
CGSize size = [theString sizeWithFont:font
constrainedToSize:CGSizeMake(width, 100000)];
return size.height;
Ответ 2
Для UITextView все, что вам нужно сделать, это вызвать -sizeToFit в представлении и автоматически изменить его высоту до тех пор, пока он не поместит весь доступный текст. Все, что вам нужно сделать, это установить ширину текстового вида, задать текст, а затем вызвать -sizeToFit. Текстовое представление будет изменять его высоту настолько, чтобы соответствовать всему тексту.
UPDATE:
По-видимому, текстовые представления уменьшаются только при избыточной высоте, но они не растут, если имеется недостаточная высота для отображения всего текста. Кроме того, после вызова -sizeToFit координата текстового представления y reset возвращается к 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.
Ответ 3
На самом деле вы можете использовать свойство contentSize.