Swift - UIScrollView не прокрутка

Мой UIScrollView не будет прокручиваться вниз. Я не знаю, почему. Я уже обращался к документации Apple по этой проблеме.

@IBOutlet weak var scroller: UIScrollView!

    override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

}

override func viewDidLayoutSubviews() {
    scroller.scrollEnabled = true
    // Do any additional setup after loading the view
    scroller.contentSize = CGSizeMake(400, 2300)
}

Прошу совета. Спасибо.

Ответы

Ответ 1

Вам нужно установить frame вашего UIScrollView так, чтобы он был меньше, чем contentsize. В противном случае, он не будет прокручиваться.

Кроме того, я бы рекомендовал вам добавить scroller.contentSize = CGSizeMake(400, 2300) в ваш метод viewDidLoad.

Ответ 2

В то же время код правильный, если вы следовали учебному курсу, но то, что многие новички не знают, - это то, что scrollView НЕ будет нормально прокручиваться через симулятор. Предполагается прокручивать только при нажатии на коврик мыши и одновременной прокрутке. Многие опытные пользователи XCode/Swift/Obj-C настолько полезны для этого, и поэтому они не знают, как это можно упустить новичками. Ciao: -)

@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(scrollView)
// Do any additional setup after the view
}

override func viewWillLayoutSubviews(){
super.viewWillLayoutSubviews()
scrollView.contentSize = CGSize(width: 375, height: 800)
}

Этот код будет работать отлично, если вы делаете то, что я сказал выше

Ответ 3

версия Swift 3.0

scroller.contentSize = CGSize(width: scroller.contentSize.width, height: 2000)

Ответ 4

Если вы используете автозапуск, свойство contentSize перестает работать, и оно попытается вывести размер содержимого из ограничений. Если это так, то ваша проблема может заключаться в том, что вы не определяете необходимые ограничения для представления содержимого, чтобы scrollview мог вывести размер содержимого. Вы должны определить ограничения своего содержимого на верхний и нижний края прокрутки.

Ответ 5

Если вы используете AutoLayout,

Установите размер содержимого в viewdidAppear, который работает для меня.

переопределить функцию viewDidAppear (_ animated: Bool) {

    scrollView.contentSize = CGSize(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height+300)

}

Ответ 6

Я не знаю, что это хорошее решение, но вы можете попробовать установить headerview для пустого UITableView.

let scrollView: UIView = UIView(frame: CGRectMake(0, 0, 400, 2300))

tableView.tableHeaderView = scrollView

Ответ 7

Похоже, что представление не может опуститься по двум причинам, так как ваш код отлично звучит.

  • Во-первых, вы не видите индикатор прокрутки
  • Вторая причина: нет ничего в представлении для отображения

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

Первая причина, по которой я вижу происходящее, когда ограничения не установлены в раскадровке, особенно если размер диспетчера представлений в раскадровке установлен на "Любой". Прокрутка будет более широкой, чем экран симулированного или реального устройства, и, таким образом, индикатор прокрутки будет находиться за пределами видимого экрана.

Ответ 8

У меня были проблемы с этим, и я не мог найти ответ для меня, пока не разработал его. У меня был вид прокрутки внутри обычного вида, и как только я заменил "вид" на "прокрутку", он прокручивался отлично. Просто заставляйте кого-то спотыкаться над этим.

Я не уверен, что это означало остановить его от работы, поскольку я очень неопытен, но это, казалось, было моим решением. Надеюсь, это поможет кому-то.

Ответ 9

В моем случае я использовал UIStackView внутри UIScrollView.

Добавлены некоторые view-элементы из кода в stackview. Это не будет прокручивать.

Исправлено это путем установки в стеке userInteractionEnabled false.

Ответ 10

Проблема может заключаться в том, что ваш scrollView не знает свой contentSize, как указано выше, но исправить это проще, чем приведенные выше ответы. Как сказал Карлос, но я уточню подробнее. Если вы хотите, чтобы ваш scrollView выполнял вертикальную прокрутку (вверх и вниз), сделайте ваш contentView, который находится в иерархии scrollView, равным ширине ViewController и присвойте ему ограничение по высоте, которое работает для вашего проекта, т.е. 700. Для противоположного (по горизонтали) сделайте высоту равной ViewController, а ширину - большим числом, которое подходит для вашего проекта.

Ответ 11

Не задавайте фиксированную высоту для представления прокрутки и всегда задавайте верхнюю часть первого подпредставления для просмотра прокрутки и нижнюю часть последнего подпредставления для просмотра прокрутки. Таким образом, представление прокрутки будет автоматически увеличиваться в соответствии с размером вложенных подпредставлений. Нет необходимости указывать contentSize для scrollview. Он будет работать как для маленьких, так и для больших iPhone.