UIScrollView не будет прокручиваться! - PullRequest
17 голосов
/ 25 ноября 2010

В IB у меня есть свой UIView. Тогда у меня есть sub-UIView с UIScrollView в качестве вспомогательного представления. Тогда UIScrollView имеет подчиненный UIImageView. UIScrollView и UIImageView имеют одинаковый размер. Они намного больше, чем UIView, к которому они относятся. Я предполагал, что это сделает работу прокрутки. Это не так. Требуется ли какой-то код для работы прокрутки?

Ответы [ 9 ]

29 голосов
/ 25 ноября 2010

Вам необходимо установить UIScrollView.contentSize, чтобы соответствовать общему прокручиваемому размеру, который в данном случае является вашим размером кадра подпредставления.

12 голосов
/ 13 июня 2013

Как указано в принятом ответе, вы должны установить свойство UIScrollView contentSize.

Это можно сделать в Интерфейсном Разработчике.

  1. Выберите прокруткуview
  2. Выберите «проверку личности» на панели служебных программ справа
  3. В разделе «Определенные пользователем атрибуты времени выполнения» нажмите кнопку «+»
  4. Установите «Путь к ключу»значение в 'contentSize'
  5. Установить значение 'Тип' в 'Размер'
  6. Установить значение 'Значение' в '{ширина, высота}' (например: '{320, 600}')

Создайте и запустите, и ваше представление прокрутки будет прокручиваться.

Вставка содержимого не влияет на прокрутку.См. Для чего нужно свойство contentInset UIScrollView?

6 голосов
/ 25 ноября 2010

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

4 голосов
/ 02 декабря 2012

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

Смешно от моего имени, я знаю, но на всякий случай, если это кому-то поможет.

2 голосов
/ 21 мая 2011

Я поместил все содержимое моего прокрутки в IB. (кнопки, метки, текстовые поля и т. д.). Полный размер 500 в высоту. Затем я изменил его размер до 436 в IB.

Затем в коде я ставлю это viewDidLoad:

optionsScrollView.contentSize = CGSizeMake(320,500);

Так что остается 64 пикселя, которые я могу прокручивать. Работает отлично.

Я также поместил «UIScrollViewDelegate» в фигурные скобки <> @interface для моего файла .h и привязал выход делегата из скроллвью к владельцу файла в IB.

1 голос
/ 15 марта 2016

Другая важная вещь, о которой я не упомянул, это то, что UIScrollView не очень хорошо работает с AutoLayout.Если вам кажется, что вы все сделали правильно, проверьте, включен ли в ViewController режим автопоставки, и, если это так, выключите его.

(При каждой прокрутке представления перестраиваются. Gak!!

1 голос
/ 17 февраля 2012

больше, вы включили прокрутку?посмотрите на имущество

@property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled
0 голосов
/ 07 февраля 2019

Я мог решить проблему с прокруткой с помощью следующего ответа:

https://stackoverflow.com/a/39945124/5056173

По мне, трюк был:

  1. Теперь вам нужно установить высоту содержимого UIView. Затем вы можете либо указать высоту представления содержимого (обрезать), либо использовать высота элементов управления, содержащихся внутри, убедившись, что дно элемент управления ограничен нижней частью представления содержимого.

Я установил высоту и ширину представления внутри scrollView с помощью вертикального и горизонтального выравнивания по центру , и именно поэтому не сработало!

После удаления этих ограничений мне нужно добавить равную ширину (scrollView и вид внутри scrollView) AND I установить высоту вида внутри scrollView непосредственно с содержанием . Что означает: Последний элемент в представлении должен иметь нижнее ограничение для вида !!

0 голосов
/ 08 мая 2012

Представление прокрутки работает с этим:
Кадр
, затем
contentSize
просмотры или объекты и т. Д.т прокрутка.Так что установите свой фрейм (в правой панели IB -> вторая последняя вкладка «Инспектор размеров») на длину вашего приложения (в моем случае это 367, так как у меня есть панель навигации и панель вкладок), затем программно установите contentSize в - yupвы догадались ... больше, чем ваш кадр, чтобы он мог прокручиваться.

Счастливые дни !!

...