it-swarm.com.ru

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)
}

Пожалуйста, порекомендуйте. Спасибо.

26
Mohammad Nurdin

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

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

39
Christian

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

@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)
}

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

12
flo527

версия Swift 3.0

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

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

3
Carlos Compean

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

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

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

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

}
2
satheesh

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

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

tableView.tableHeaderView = scrollView
2
gellezzz

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

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

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

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

0
Tokuriku

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

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

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

0
Zaporozhchenko Aleksandr

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

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

0
Steve