Autoresize UITextView и UIScrollView

Я уже делал несколько поисков в Qaru и Google, но я не мог найти решение моей проблемы.

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

Сначала я хочу авторизовать 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 frame].size.height), потому что я думал: после получения высоты myUITextView добавьте к нему высоту других подпрограмм (98.0).

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

2010-01-27 14: 15: 45.096 myApp [1362: 207] [рама myUITextView].size.height: 367.000000

Спасибо!

Ответ 1

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

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

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

Ответ 2

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

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

// 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 Предупреждение, ссылка на документы правильная, но мой пример кода не проверен, извините:)