У меня есть UIScrollView
, созданный в построителе интерфейсов с добавленной связью объектов UITextView
и UIImageView
. Я подключил его к IBOutlet
, а под -(void)viewDidLoad
я установил его размер содержимого 1200x2000
. Пользовательское взаимодействие Enabled, Multitouch, Scrolling Enabled и показывает, что индикаторы вертикальной и горизонтальной прокрутки установлены на YES
. Когда я запускаю приложение в iOS-симуляторе, он не прокручивается. Что может быть причиной такого поведения?
UIScrollView не прокрутка?
Ответ 1
-
viewDidLoad скоро. Вы должны подождать, пока не будет выполнена макет представлений. Попробуйте установить contentSize в viewDidAppear.
-
Вы используете автозапуск? Если да, проверьте следующий ответ (и забудьте 1.): UIScrollView не использует ограничения автоопределения.
Ответ 2
Лучший способ узнать, как преодолеть эту проблему, не прибегая к написанию кода, - это то, что все это можно сделать в раскадровке, и вот как:
- Оставьте автозапуск включен.
- Сделать общий UIView подвью UIScrollView. 2.1) Поместите все компоненты View в этот общий UIView.
- Сделать ограничение автоопределения между подвью и UIScrollView. Вы должны навести правую и/или нижнюю часть последнего подсмотра справа и/или нижней части UIScrollView. Вот как UIScrollView знает размер содержимого.
Ответ 3
viewDidLoad
действительно слишком скоро, но viewDidAppear:animated
тоже может быть не слишком запоздалым. Идеальное место для установки contentOffset
находится внутри viewDidLayoutSubviews
.
Ответ 4
Если вы используете Autolayout, убедитесь, что вы установили код для установки размера содержимого внутри
viewDidLayoutSubviews
Ответ 5
Я использую пользовательский вид в UIScrollView, для функции обновления, а прокрутка не прокручивается. Я пытаюсь установить contentSize
с помощью AutoLayout
и попытаться установить его также с помощью кодов. Прокрутка по-прежнему не может прокручиваться.
Проведя 3 ~ 4 часа, я разрешаю его contentInset
. Он покажет прокрутку, чтобы добавить дополнительное пространство для прокрутки.
override func viewDidLayoutSubviews() {
// Add extra 15pt on the `top` of scrollView.
//self.scrollView.contentInset = UIEdgeInsetsMake(15, 0, 0, 0)
// Add extra 2pt on the `bottom` of scrollView, let it be scrollable. And the UI is more beautiful in my case.
self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 2, 0)
}
Справочные документы: