NSString sizeWithFont: для нескольких строк? - PullRequest
13 голосов
/ 05 февраля 2011

Существует ли эквивалент sizeWithFont: метода NSString, который можно использовать для вычисления высоты текста в UITectView для заданной ширины?Все методы из NSString работают только на одной строке из того, что я могу сказать.

Ответы [ 3 ]

33 голосов
/ 05 февраля 2011

Из справки Apple для этих методов NSString вы можете использовать -sizeWithFont:constrainedToSize: или -sizeWithFont:constrainedToSize:lineBreakMode: для «Вычисления метрик для нескольких строк текста».

CGSize size = [theString sizeWithFont:font
                    constrainedToSize:CGSizeMake(width, 100000)];
return size.height;
4 голосов
/ 05 февраля 2011

Для 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.

1 голос
/ 09 октября 2011

на самом деле, вы можете использовать свойство contentSize.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...