Проектирование внутри прокрутки в xcode 4.2 с раскадровками - PullRequest
27 голосов
/ 11 января 2012

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

Ответы [ 9 ]

51 голосов
/ 11 января 2012

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

39 голосов
/ 30 марта 2012

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

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

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

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

25 голосов
/ 27 марта 2013

Новое: 3/26/2013

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

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

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

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

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

11 голосов
/ 29 августа 2014

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

4 голосов
/ 07 октября 2012

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

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

2 голосов
/ 14 июня 2012

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

0 голосов
/ 02 января 2014

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

0 голосов
/ 22 октября 2013

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

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

0 голосов
/ 03 июня 2013

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

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

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

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

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

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

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

Понятия не имею, что является причиной (3), но это явно ошибка.

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

...