2012-01-10 2 views
27

У меня есть прокрутка по вертикали uiscrollview - представьте себе страницу «об этом приложении» на панели вкладок, которая идет немного и требует прокрутки. Он содержит только несколько изображений, видео и текст (только видео было закодировано - остальные были помещены в графический интерфейс). В раскадровке (Interface Builder?) Xcode 4.2 все настроено так, как должно быть, и отлично работает, но представление только настолько велико, как то, что вы видите на экране, невозможно вручную организовать в раскадровке элементы, которые изначально за кадром - что вам нужно прокрутить вверх до? Единственный способ, который я нашел до сих пор, - это сконструировать их на видном виде, а затем переместить их вниз с помощью клавиш со стрелками.Проектирование внутри scrollview в xcode 4.2 с раскадровки

ответ

39

Я чувствую вашу боль. Единственный способ, которым я нашел, - это вручную панорамировать вид прокрутки в инспекторе размеров, чтобы показать часть вида, которую вы хотите визуально редактировать.

Используйте UIView для размещения элементов, чтобы они располагались относительно этого вида. Добавьте представление как подпункт в scrollview в 0,0.

  1. панорама: используйте координату Y, чтобы указать -200, а затем отредактируйте содержимое.
  2. Чтобы разместить больше содержимого в скрытой части, снова разверните, чтобы открыть новую недвижимость
  3. По завершении восстановите значения высоты ScrollView и положения X, Y.

Убедитесь, что прямоугольник рамки прокрутки меньше, чем содержащийся.

+16

Хорошее решение проблемы, которая не должна существовать! –

51

В раскадровке выберите viewController, затем в инспекторе атрибутов измените размер на 'freeform' , Затем измените «высоту» вида просмотра/прокрутки на столько, сколько вам нужно. Настройки по умолчанию для распорок и пружин должны позаботиться о том, чтобы правильно изменить вид назад, когда приложение запущено, но вы должны дважды проверить.

+0

Это, кажется, работает нормально, пока я не попытаюсь изменить размер представления или прокрутки в раскадровке, после чего содержимое все искажает по отношению к изменению размера представления ... – John

+0

Джону, на самом деле это не проблема. Если вы перейдете к «инспектору размера» для этого прокрутки и измените «автоматическое определение размера». Очистите горизонтальные и вертикальные стрелки внутри прямоугольника. (Я также очищаю «правые» и «нижние» стрелки, поэтому мой вид прокрутки может привязываться к верхнему левому углу). Тогда размер представления прокрутки не зависит от размера родительского представления. –

+0

Существует не такой размер или свободная форма. –

2

Просто снимите флажок «Подсветка Autoresize» из любого вида, которое вы пытаетесь изменить, и оно должно не изменять все ваши объекты.

4

На iOS 6.0 вы можете перетащить Контейнер в свой вид прокрутки. Это автоматически создаст новый вид для вашего контента за пределами текущей сцены. Затем вы можете изменить размер этого представления настолько, насколько это необходимо, чтобы соответствовать вашему контенту.

Я считаю, что вам все равно придется устанавливать высоту содержимого ScrollView во время выполнения, но по крайней мере вы можете самостоятельно спроектировать представление контента без необходимости прокрутки вверх и вниз по IB.

+0

Я думаю, вы должны установить высоту Container View, а не высоту содержимого ScrollView. Я хотел бы знать, как установить высоту Container Views на высоту встроенного представления с использованием ограничений макета. У вас есть мысли по этому поводу? –

25

Новое: 3/26/2013

я наткнулся на то, что я думаю, что это более простой способ борьбы с UIScrollView непосредственно в раскадровке.

  1. Не требуется код, только настройки раскадровки. Это может быть новый в iOS6.1/Xcode 4,6
  2. Нет необходимости отключить ограничения (т.е. снимите флажок «Использовать autolayout» в File Inspector для раскадровки файла)
  3. Нет необходимости добавлять UIScrollView * Scrollview; в .h
  4. Не нужно добавлять self.scrollView.contentSize = ...в переопределения viewWillAppear или viewDidLoad

Вот что я сделал (важные части выделены **): (см code)

  1. Создать новый проект с раскадровки включен
  2. Капля в UIScrollView , установить класс в инспекторе идентификации для контроллера вида
  3. В атрибутах Инспектор, измените размер под смоделированными метриками на Freeform **
  4. Выберите прокрутку; В инспекторе атрибутов включите «прокрутка включена» и «фон» на «белый» (вы поймете, почему - если вы этого не сделаете)
  5. Под размерным инспектором (с выбранным видом прокрутки) измените высоту до 900 для пример **
  6. Добавить кнопки, один сверху и один внизу
  7. Добавить обработчик по умолчанию для кнопки ButtonTouchUpInside для обеих кнопок и просто отправителя журнала.

См. Code Выберите контроллер просмотра и прокрутите список и проверьте инспекторы.

+6

Существует много литературы по этому вопросу, но вы первый, с которым я столкнулся, на самом деле отвечает на этот проклятый вопрос. FREEFORM - это то, что его исправляет. Я долгое время пытался понять это, спасибо за то, что поделился! –

+3

свободная форма контроллера вида? – coolcool1994

0

Я боролся с этим какое-то время, и все, что я пробовал, потерпели неудачу.

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

В конечном итоге загружен код Дики Сингха, который отлично работал, но ничего особенного не имел. (Отличное чистое решение BTW). Итак, я добавил контейнерный вид, точно так же, как и в моем коде, и он сломался!

После некоторых экспериментов я выяснил, что происходит. Просто медведь со мной.

1) Используя автоматический макет, размер прокрутки, по-видимому, определяет, каковы будут границы прокрутки. Установка «contentSize» в «Определенные пользователем атрибуты времени выполнения», по-видимому, не влияет на это, и также не устанавливает параметр «contentSize» или «bounds» в «viewWillDisplay» или «viewDidLoad». Таким образом, если начальный размер прокрутки составляет 800x800, это будет все пространство, которое может отображаться. По этой причине, когда я хочу прокручиваемую область, я создаю представление контейнера, а затем помещаю прокручивающийся вид внутри содержимого.

2) Без автоматической компоновки, настройка «contentSize» в «Определенные пользователем атрибуты времени выполнения» работает, как и путем ее программного программирования в «viewDidLoad». Я предпочитаю использовать «User Defined Runtime Attributes», потому что он сохраняет размер с макетом. Это решение позволяет использовать прокрутку с большей гибкостью, поскольку во время разработки может быть любого размера.

3) Независимо от автоматического макета, если какой-либо вид в области прокрутки точно совпадает с горизонтальной или вертикальной рамкой, тогда прокрутка перестает функционировать в виде прокрутки. Это касается моего собственного кода и кода Дики Сингха во всех возможных конфигурациях, которые я пробовал.

Я понятия не имею, что вызывает (3), но это явно ошибка.

Надеюсь, это поможет всем, кто борется за использование прокрутки.Я думаю, что некоторые люди используют их без каких-либо проблем, и некоторые (как я) замечали, но проблемы с ними.

0

Вот мое решение разработать Scrollview с содержанием больше, чем экран полностью на раскадровку (ну, за 1 одной строки кода :-) кроме:

https://stackoverflow.com/a/19476991/1869369

0

Я в настоящее время разрабатывает приложение для iOS 7, и я сделал точно как ответ @Dickey Singh, но он не работает в начале. После проверки раскадровки я обнаружил, что нам также нужно добавить автоматические ограничения компоновки для контроллера вида, который имеет scrollView. Кажется, что такие ограничения автоматического компоновки будут добавлены автоматически до Xcode 5, но теперь нам нужно сделать это сами. Способ добавления ограничений: сначала выберите контроллер вида в раскадровке; Введите «Редактор» в верхнем меню; Выберите «Разрешить автоматические макеты»; Выберите «Добавить недостающие ограничения в контейнере». Выполнено :-)

10

Просто измените «Имитированный размер» контроллера вида на свободную форму и установите высоту, которая больше обычного, вы сможете увидеть все выходы, которые вам нужно отредактировать.

+1

вы изменили мою жизнь, спасибо: D –

+0

Это должен быть принятый ответ .. гораздо более элегантное решение – Ciprian

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