NSString sizeWithFont: для нескольких строк?
Существует ли эквивалент метода NSString sizeWithFont:
, который можно использовать для вычисления высоты текста в UITectView для заданной ширины? Все методы из NSString работают только на одной строке, что я могу сказать.
Ответы
Ответ 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.