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