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

пожалуйста, советом. Спасибо.

7 ответов


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

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


Swift 3.0 версия

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

много времени код корректен, если вы следовали учебнику, но многие новички не знают, что 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)
}

этот код будет работать отлично, как пока ты делаешь то, что я сказал наверху!--2-->


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


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

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

tableView.tableHeaderView = scrollView

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

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

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

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


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

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