Как я могу динамически исправить свой scrollView, когда у меня есть более одного textView?

У меня есть scrollView, который состоит из 3-х текстовых представлений, кнопок и меток в подробном представлении. я использую 3 текстовых представления, потому что мне нужны разные шрифты для заголовка, даты и описания моего представления. проблема в том, что иногда описание длинное, а иногда маленькое и то же самое с заголовками. тогда вид вообще не выглядит хорошо из-за большого количества пустых мест между заголовком и описанием. Можно ли динамически установить размер textView и прокрутки или есть ли лучший подход для решения этой проблемы. спасибо заранее


person Piscean    schedule 21.02.2011    source источник


Ответы (2)


Вам необходимо настроить рамки текстовых представлений в соответствии с их соответствующими размерами содержимого (см. верхний ответ здесь: Как мне изменить размер UITextView на его содержимое? о том, как это сделать, используйте свойство contentSize текстового представления), затем вы настраиваете contentSize scrollView на основе кадров все элементы управления.

Предполагая, что ваши текстовые представления расположены последовательно по вертикали (просто отрегулируйте код, если есть интервал и т. д.):

// (first adjust each text view's frame per the linked answer)
...
// then adjust the frames of the content
CGRect topTextViewFrame = topTextView.frame;
CGRect middleTextViewFrame = middleTextView.frame;
middleTextViewFrame.origin.y = topTextViewFrame.origin.y + topTextViewFrame.size.height;
middleTextView.frame = middleTextViewFrame;
CGRect bottomTextViewFrame = bottomTextView.frame;
bottomTextViewFrame.origin.y = middleTextViewFrame.origin.y + middleTextViewFrame.size.height;
// then adjust your other controls based on these frames, for example:
CGRect myButtonFrame = myButton.frame;
myButtonFrame.origin.y = bottomTextViewFrame.origin.y + bottomTextViewFrame.size.height;
// finally adjust the contentSize of the scrollview assuming the button is the bottom element
CGSize csize = myScrollView.contentSize;
csize.height = myButtonFrame.origin.y + myButtonFrame.size.height;
myScrollView.contentSize = csize;
person Bogatyr    schedule 21.02.2011
comment
я поместил все текстовые представления и кнопки в scrollView друг за другом, а затем попытался сделать то, что вы сказали в этом коде. но он не работает - person Piscean; 21.02.2011
comment
вам нужно быть более точным в том, что вы имеете в виду, когда говорите, что это не работает. Что не работает? Размер текстовых представлений к содержимому или размещение фреймов или и то, и другое? Мне нравится устанавливать разные цвета фона для видов, когда я работаю над их правильным размещением, это помогает выделить, где они находятся. - person Bogatyr; 21.02.2011
comment
каждый фрейм textView должен начинаться с того места, где заканчивается его верхний фрейм textViews. но так не бывает. если в 1-м фрейме textViews больше текста, то он появляется поверх 2-го textView. и в некоторых деталях последняя кнопка не вписывается в содержимое scrollView. - person Piscean; 21.02.2011
comment
Вам нужно придерживаться одного вопроса и перестать создавать новые вопросы, которые по сути одинаковы. Выполните отладку, распечатайте все кадры и дважды/трижды проверьте свои расчеты. Начните с правильного размера верхнего фрейма, затем перейдите к расположению нижних фреймов один за другим. Вы должны сразу же указать на какую-то конкретную проблему, например: рамка верхнего текстового представления не подстраивается под размер своего содержимого. Публикуйте конкретные заявления о том, что происходит, и задавайте более конкретные вопросы, а не расплывчатые заявления, которые не работают. - person Bogatyr; 21.02.2011

Вы можете установить размер кадра в зависимости от длины символа, установив кадр в начале следующим образом:

CGRectMake (0.0, 0.0, [yourString count]*10, 30.0);

Это то, что я сделал, когда UIPopover придумал имя переменной.

person SushiGrass Jacob    schedule 21.02.2011