Автоизмените размеры UITextView и UIScrollView

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

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

27.01.2010 14:15:45.096 myApp [1362:207] [myUITextView кадр] .size.height: 367.000000

Спасибо!

11
задан dennis3484 27 January 2010 в 16:44
поделиться

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

.
0
ответ дан 3 December 2019 в 05:12
поделиться

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

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

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

22
ответ дан 3 December 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: