Автоматическое изменение размера UITextView и UIScrollView

Я уже сделал несколько поисков в Stack Overflow и 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 frame].size.height: 367.000000

Спасибо!


person dennis3484    schedule 27.01.2010    source источник


Ответы (2)


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

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

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

person Ronnie Liew    schedule 21.03.2010

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

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

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

person deanWombourne    schedule 27.01.2010
comment
Спасибо за вашу помощь. Кажется, sizeWithFont:forWidth:lineBreakMode: работает только для одной строки текста. Я пробовал sizeWithFont:constrainedToSize:lineBreakMode: и вроде работает. Иногда он не вычисляет правильную высоту. Я предполагаю, что это из-за некоторых разрывов строк в исходном тексте, поэтому я добавил 30 пикселей к кнопке. - person dennis3484; 09.02.2010
comment
Я только что проверил документы, и вы абсолютно правы, извините за это! У меня были проблемы с тем, что иногда он возвращал неправильную высоту, и я использовал точно такое же решение, как и вы, - добавить 30 пикселей :) - person deanWombourne; 09.02.2010