Проектирование внутри scrollview в xcode 4.2 с помощью раскадровки

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

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

Новое: 3/26/2013

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

  • Не требуется код, только настройки раскадровки. Это может быть новым в iOS6.1/Xcode 4.6
  • Не нужно отключать ограничения (т.е. снимите флажок "Использовать автозапуск" в "Файловом инспекторе" для файла раскадровки)
  • Не нужно добавлять UIScrollView * scrollView; в .h
  • Не нужно добавлять self.scrollView.contentSize =... в переопределения viewWillAppear или viewDidLoad

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

  • Создайте новый проект с включенной раскадрой.
  • Отбросить в UIScrollView, установить класс в инспекторе идентификации для контроллера представления.
  • В атрибутах Inspector измените размер под смоделированными метриками на Freeform **
  • Выберите режим прокрутки; В инспекторе атрибутов включите "scroll enabled" и "background" на "White" (вы поймете, почему - если вы этого не сделаете)
  • In Size Inspector (с просмотром прокрутки) измените высоту до 900, например **
  • Добавить кнопки, один сверху и один внизу
  • Добавить обработчик по умолчанию для кнопки ButtonTouchUpInside для обеих кнопок и просто отправителя журнала.

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

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

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

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

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

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

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

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

Ответ 8

Здесь мое решение для разработки ScrollView с содержимым, большим, чем экран целиком в Storyboard (ну, кроме 1 единственной строки кода:-):

fooobar.com/questions/53558/...

Ответ 9

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