Как мне использовать UIScrollView в Интерфейсном Разработчике? - PullRequest
95 голосов
/ 16 июля 2009

Хотя в прошлом я успешно использовал UIScrollView, манипулируя им программно, у меня возникли проблемы с его настройкой, поскольку он был настроен исключительно в Интерфейсном Разработчике.

У меня есть простая страница "о" в моем приложении iPhone. Он имеет UITextView, некоторые значки и ссылки на другие мои приложения. Я добавил все эти виды к своему UIScrollView, упорядочив их так, чтобы их общий размер был> 480. Когда я запускаю свое приложение, в представлении прокрутки отображается только содержимое, которое помещается на экране, и ничего не прокручивается.

Возможно ли сделать это полностью через IB, или я должен манипулировать contentSize с помощью кода?

Ответы [ 17 ]

2 голосов
/ 21 июля 2014

Просто удалите autoLayout на вашем просмотре прокрутки. тогда код так прост:

scrollviewName.contentSize = CGSizeMake(0, 650);

просто создайте свойство iboulet в файле .h, а затем синтезируйте в файле .m. Убедитесь, что прокрутка включена.

1 голос
/ 31 марта 2015

Вы можете иметь UIScrollView в StoryBoard с Autolayouts. В основном, что вам нужно:

  1. Добавить UIScrollView
  2. Добавить все ограничения (например, вставки сверху, слева, справа, снизу)
  3. Добавление контейнера UIView в UIScrollView
  4. Если вы хотите просто прокрутить в одном направлении (скажем, по вертикали): явно установить высоту (например, 600) и ширину ссылки на ширину UIScrollView.
  5. Если вы хотите двунаправленную прокрутку, просто установите ширину и высоту.

storyboard setup

1 голос
/ 18 февраля 2015

Да, st3fan верно, свойство contentSize UIScrollView должно быть установлено. Но вы не должны отключать автопоставку для этой цели. Вы можете легко настроить contentSize для UIScrollView с автоматической разметкой только в IB без кода.

Важно понимать, что при использовании autolayout contentSize UIScrollView не устанавливается напрямую, он рассчитывается на основе ограничений всех подпредставлений UIScrollView. И все, что вам нужно, это обеспечить надлежащие ограничения для подпредставлений в обоих направлениях.

например. если у вас есть только одно подпредставление, вы можете установить его высоту и пространство сверху и снизу для суперпредставления (т.е. в нашем случае scrollView) contentSize.height рассчитывается как сумма

Vertical Space (aSubview.top to Superview.top) + aSubview.height + Vertical Space (aSubview.top to Superview.top)

contentSize.width рассчитывается аналогично горизонтальным ограничениям.

Если для расчета contentSize слишком мало ограничений, то рядом с элементом View Controller Scene отображается небольшая красная кнопка, чтобы сообщить о неоднозначности макета.

Если существует много подпредставлений, то это может быть «цепочка» ограничений: сверху до верха подпредставления, высоты и промежутков между подпредставлениями и от нижнего подпредставления до низа, как в Danyal Aytekin answer.

Но на практике в большинстве случаев удобнее просто добавить пустое представление с требуемым размером и установить пробелы сверху, слева, снизу, справа от scrollView в 0. Вы можете использовать это представление как «представление содержимого», т.е. поместить все остальные подпредставления в него или, если у вас уже есть много подпредставлений, и вы не хотите перемещать их и заново настраивать макет, вы можете добавить этот вспомогательный вид к существующим подпредставлениям и сделать его скрытым.

Чтобы сделать scrollView scrollable рассчитанным contentSize, он должен быть больше размера scrollView.

0 голосов
/ 27 февраля 2018

Создать новый проект Xcode

Перейдите к файлу Main.storyboard

Выберите ScrollView из библиотеки объектов.

Установить рамку для ScrollView.

Добавьте другой вид для просмотра с прокруткой и оставьте кадр таким же, как у ScrollView.

Теперь, чтобы динамически установить его высоту и ширину, вы можете это Настроить UIScrollView, используя автоматическое расположение в XIB

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

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

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

0 голосов
/ 21 ноября 2016
  1. Добавить UIViewController
  2. В UIViewController 'Инспектор атрибутов -> Симулированные метрики' установлен размер Freeform
  3. В UIViewController 'Size Inspector -> View Controller' установлена ​​высота 800
  4. Добавление UIScrollView в UIViewController
  5. Добавьте все ограничения в UIScrollView (сверху, слева, справа, снизу) и добавьте выравнивание X = center
  6. Добавление UIView в UIScrollView
  7. Добавьте все ограничения в UIView (сверху, слева, справа, снизу) и добавьте выравнивание X = center. Да, так же, как для UIScrollView в # 3, но для UIView
  8. Добавить ограничение по высоте в UIView. Например 780
  9. Run

Storyboard

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

Нахожу более удобный способ.

1: измените размер представления прокрутки, чтобы в нем содержался весь пользовательский интерфейс.

2: Добавьте iboutlet вида прокрутки.

3: В viewDidLoad сохраните frame.size вида прокрутки.
(например, _scrollSize = _scrollView.frame.size;)

4. В viewWillAppear задайте размер содержимого для размера CG, который вы сохранили ранее.
(например, _scrollView.contentSize = _scrollSize;)

5: Готово ~

...