Есть ли эквивалент метода NSString sizeWithFont:
, который может использоваться для расчета высоты текста в UITectView для заданной ширины? Все методы из NSString работают только на одной строке, что я могу сказать.NSString sizeWithFont: для нескольких строк?
ответ
От Apple's reference для этих методов NSString вы можете использовать -sizeWithFont:constrainedToSize:
или -sizeWithFont:constrainedToSize:lineBreakMode:
для «Вычисления показателей для нескольких строк текста».
CGSize size = [theString sizeWithFont:font
constrainedToSize:CGSizeMake(width, 100000)];
return size.height;
Для UITextView
, все, что вам нужно сделать, это вызов -sizeToFit
на взгляд, и он будет автоматически изменять его высоту, пока он не может поместиться весь текст доступен. Все, что вам нужно сделать, это установить ширину текстового вида, установить текст, затем вызвать -sizeToFit
. Текстовое представление изменит его высоту настолько, чтобы соответствовать всему тексту.
UPDATE:
Видимо TEXT вид сжиматься только тогда, когда есть избыток высоты, но они не растут, если есть недостаточная высота для отображения всего текста. Кроме того, как только вы вызываете -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
рассчитывается.
Кажется ничего не меняет. – Jumhyn
Я выяснил, как работает UITextView. Выполнение чего-то вроде кода образца, который я добавил, должно привести к текстовому представлению, которое достаточно высоко, чтобы соответствовать всему тексту. – LucasTizma
CGFLOAT_MAX вызвал некоторые напуганные размытия/разрывы на iPhone 5.1, когда UITextView ушел в отставку с первого ответчика, а UITableView прокручивается назад. Меньшее число, например 1024.0f (длинная сторона iPad), исправило это для меня. –
Фактически, вы можете использовать свойство contentSize.
Это именно то, что я использовал для определения высоты нескольких строк. В основном вы просто устанавливаете возможную высоту для некоторого действительно большого значения и возвращаете фактический размер, который соответствует тексту, заключенному в несколько строк. –
Кажется, это возвращает значение 1-2 строк слишком мало. Любая идея почему? – Jumhyn
@Jumhyn: попробуйте метод '-drawInRect:', чтобы вывести строку, чтобы проверить, не обертывается ли она в нужном месте. – kennytm