Горизонтальный вид прокрутки прокручивается, но только частично и возвращается в исходное положение - PullRequest
0 голосов
/ 14 июня 2019

У меня есть горизонтальная прокрутка с содержимым следующим образом:

enter image description here

Когда я запускаю его, частично прокручивает горизонтально - я могу прокручивать дополовина красного вида видна, но затем отскакивает назад.Как я могу получить его так, чтобы он мог прокручиваться полностью, чтобы весь красный вид был виден, а затем оставался там?

У меня это есть в контроллере вида, но это не имеет значения, есть он или нет.

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    print("Content view bounds: \(contentView.bounds)")
    scrollView.layoutIfNeeded()
    scrollView.contentSize = contentView.bounds.size
}

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

enter image description here

Ответы [ 2 ]

1 голос
/ 14 июня 2019

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

Сначала удалите ограничение Content View.width = width:

enter image description here

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

После удаления этого ограничения добавьте 20-pt конечное ограничение из Red View к конечному краю представления содержимого:

enter image description here

Теперь у вас есть полная цепочка горизонтальных ограничений ...

- Blue View.leading = leading + 20
- Blue View Width
- Red View.leading = Blue View.trailing + 40
- Red View Width
- trailing = Red View.trailing + 20

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

Код не нужен.

0 голосов
/ 14 июня 2019

Я получил его на работу, добавив следующее:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    scrollView.contentSize = CGSize(width: 750,height: 812)
}

Но почему работает вышеперечисленное, а не следующее?

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    print("Content view bounds: \(contentView.bounds)")
    scrollView.layoutIfNeeded()
    scrollView.contentSize = contentView.bounds.size
}

Во время выполнения contentView.bounds имеет значение (0,0, 0,0, 750,0, 812,0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...