2010-01-27 3 views
11

Я уже делал несколько поисков в Stack Overflow и Google, но не смог найти решение моей проблемы.Autoresize UITextView и UIScrollView

У меня есть подробный вид продукта, который включает UIScrollView и несколько подзаголовков (UIImageView, UILabel, UITextView). Вы можете найти пример here.

Сначала я хочу авторизовать UITextView (а не сам текст!) До соответствующей высоты. Затем я хочу авторизовать весь UIScrollView так, чтобы он соответствовал высоте моего UITextView и элементов над ним. Я попытался следующий код:

myUITextView.frame = CGRectMake(2.0, 98.0, 316.0, self.view.bounds.size.height); 

[scrollView setContentOffset:CGPointMake(0.0, 0.0) animated:NO]; 
scrollView.contentSize = CGSizeMake(320.0, 98.0 + [myUITextView frame].size.height); 

[self.view addSubview:scrollView]; 

98,0 + [myUITextView кадр] .size.height), потому что моя мысль была: После того, как высоту myUITextView, добавить высоту других подвидов (98,0) к нему.

К сожалению, это не очень хорошо. В зависимости от содержимого UIScrollView он слишком короткий или слишком длинный. Я сделал некоторые протоколирование в результате чего высота UITextView всегда одинаков:

2010-01-27 14: 15: 45,096 MYAPP [1362: 207] [myUITextView кадр] .size.height: 367,000000

Спасибо!

ответ

0

UITextView не будет автоматически изменять размер содержимого (не настолько, насколько я знаю, так или иначе), поэтому вам нужно самому получить размер текста и размер UIView соответственно.

Функция на this page поможет - вы можете использовать их, чтобы получить ширину и высоту строки, что-то вроде

// Get the size that the string will render at 
NSString *contents = @"This is the content of your UITextView"; 
CGSize areaSize = [contents sizeWithFont:myView.font forWidth:myView.frame.size.width lineBreakMode:UILineBreakModeWordWrap]; 

// Then set the frame of your UITextView to be the right size 
myView.bounds = CGRectMake(0, 0, areaSize.width, areaSize.height); 

Затем, вы можете макет других компонентов вокруг него.

Надеется, что это помогает,

S

PS Внимание, ссылка на документы правильно, но мой пример коды не тестировался, извините :)

+0

Спасибо за помощь. Кажется, размерWithFont: forWidth: lineBreakMode: работает только для одной строки текста. Я пробовал размерWithFont: constrainedToSize: lineBreakMode: и это работает. Иногда он не вычисляет правильную высоту. Я думаю, это из-за некоторых разрывов строк в моем текстовом источнике, поэтому я добавил 30 пикселей к кнопке. – dennis3484

+0

Я только что проверил документы, и вы абсолютно правы, извините! У меня были проблемы с этим, иногда возвращали неправильную высоту, и я использовал точно такое же решение, что и вы, - добавьте 30px :) – deanWombourne

22

Существует на самом деле очень простой способ сделать измените размер UITextView на его правильную высоту, используя его contentSize.

CGRect frame = _textView.frame; 
frame.size.height = _textView.contentSize.height; 
_textView.frame = frame; 

Одна вещь, чтобы отметить, что правильный contentSize доступен только после того, как UITextView была добавлена ​​к просмотру с addSubview. До этого он равен frame.size

+0

работает как шарм – Krystian

Смежные вопросы