В IB у меня есть UIView. Затем у меня есть суб-UIView с UIScrollView в качестве дополнительного представления. Затем UIScrollView имеет суб-UIImageView. UIScrollView и UIImageView имеют одинаковый размер. Они намного больше, чем UIView, из которых они являются подчиненными. Я предположил, что это сделает прокрутку. Это не так. Требуется ли какой-либо код для просмотра прокрутки?
UIScrollView не будет прокручиваться!
Ответ 1
Вам нужно установить UIScrollView.contentSize
в соответствие с общим размером прокрутки, который в данном случае является вашим размером фрейма подкадра.
Ответ 2
Как указано в принятом ответе, вы должны установить свойство UIScrollView
contentSize
.
Это можно сделать в Interface Builder.
- Выберите вид прокрутки
- Выберите "Проверка личности" в области "Утилиты" справа.
- В разделе "Пользовательские атрибуты времени выполнения" нажмите кнопку "+"
- Задайте значение "Key Path" для "contentSize"
- Задайте для параметра "Тип" значение "Размер"
- Установите значение "Значение" в значение "{ширина, высота]" (например: "{320, 600}" )
Создайте и запустите и прокрутите прокрутку.
Вставка содержимого не влияет на прокрутку. См. Что такое свойство UIScrollView contentInset для?
Ответ 3
Для прокрутки вам нужно сделать кадр scrollview меньше, чем его содержимое, содержащее изображение или представление.
Ответ 4
Это может быть очевидно для большинства, но я потратил много времени на то, чтобы узнать, почему мой UIScrollView не будет прокручиваться, поэтому я отправляю то, что останавливает меня, если оно помогает кому-либо еще:
UIScrollView должен иметь размеры видимой области, в которой вы хотите, чтобы она была представлена, а не размер ее содержимого.
Смешно от моего имени я знаю, но на всякий случай это помогает кому-то.
Ответ 5
Я разместил все содержимое своего scrollview в IB. (кнопки, метки, текстовые поля и т.д.). Полный размер - 500. Затем я изменил его до 436 в IB.
Тогда в коде я ставлю это viewDidLoad:
optionsScrollView.contentSize = CGSizeMake(320,500);
Итак, это оставляет 64 пикселя, которые я могу прокручивать. Он работает отлично.
Я также разместил "UIScrollViewDelegate" в < > скобках @interface для моего .h файла и связал выход делегата прокрутки с файловым владельцем в IB.
Ответ 6
больше, вы включили прокрутку? посмотрите на свойство
@property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled
Ответ 7
Другая важная вещь, о которой я не упоминал здесь, - это то, что UIScrollView не очень хорошо работает с AutoLayout. Если кажется, что вы все сделали правильно, проверьте, включен ли ваш ViewController автозапуск, и если да, отключите его.
(Каждый раз, когда вы прокручиваете, взгляды переустанавливаются. Gak!)
Итак:
- Убедитесь, что scrollview
contentSize
больше, чем егоframe.size
- Убедитесь, что
AutoLayout
для ViewController выключен.
Ответ 8
Просмотр прокрутки работает следующим образом:
Рамка
затем
contentSize
виды или объекты и т.д.
Если ваш кадр установлен на ваш размер контента, он не будет прокручиваться.
Поэтому установите рамку (на правой панели IB → вторая последняя вкладка "Инспектор размера" ) на длину вашего приложения (в моем случае это 367, так как у меня есть панель навигации и панель вкладок), а затем программно установите contentSize в - yup вы догадались... больше, чем ваш кадр, чтобы он мог прокручиваться.
Счастливые дни!
Ответ 9
Я хотел бы добавить причину, по которой мой scrollview не прокручивался сегодня. Я добавил все мои подпрограммы в коде. Я правильно установил contentSize. Пользовательское взаимодействие было включено.
Моя проблема была в Interface Builder. Я разместил UIButton как подпункт моего UIScrollView. Эта кнопка вызывала прокрутку не прокрутки. Как только я удалил кнопку из Interface Builder и обработал ее в коде, мой scrollview начал прокручиваться.
Итак, вы идете. Есть еще одна вещь, которую нужно проверить, пытаясь понять, почему это не прокрутка. Проверьте построитель интерфейса для подзапросов.
Ответ 10
Я мог бы решить проблему прокрутки с помощью следующего ответа:
По мне трюк был:
- Теперь вам нужно установить высоту содержимого UIView. Затем вы можете либо указать высоту представления содержимого (blech), либо использовать высоту элементов управления, содержащихся в нем, убедившись, что нижний элемент управления ограничен нижней частью представления содержимого.
Я установил высоту и ширину представления внутри scrollView с вертикальным и горизонтальным выравниванием по центру, и это было причиной, почему это не сработало!
После удаления этих ограничений мне нужно добавить одинаковую ширину (scrollView и представление внутри scrollView), и я установил высоту представления внутри scrollView непосредственно с содержимым. Что означает: последний элемент в представлении должен иметь нижнее ограничение к представлению !!