Проблемы при встраивании UIStackView в UIScrollView

Я настраиваю интерфейс приложения iOS из конструктора интерфейсов. У меня есть несколько горизонтальных представлений стека, все они встроены в одно вертикальное представление стека. До сих пор макет, кажется, в порядке, и ограничения хорошо сделаны.

Когда я встраиваю представление вертикального стека в UIScrollView, макет становится очень плохим. Вероятно, что-то не так с моими ограничениями макета, но я действительно не знаю, что. Вот два изображения, которые представляют макет до и после встраивания в UIScrollView:

До UIScrollView

После UIScrollView

Кто-нибудь знает, почему это происходит? Заранее спасибо, ребята.

Обновить

После установки этого ограничения:

VerticalStackView.width == ScrollView.width

Результат следующий:

VerticalStackView.width == ScrollView.width img

Обновление 2

После добавления основных ограничений


person pairon    schedule 09.06.2018    source источник


Ответы (1)


Настройте следующую иерархию представлений (скриншот) и ограничения, и все будет готово:

  • ScrollView.top == View.top
  • ScrollView.leading == View.leading
  • ScrollView.bottom == View.bottom
  • ScrollView.trailing == View.trailing
  • ContentView.top == ScrollView.top
  • ContentView.leading == ScrollView.leading
  • ContentView.bottom == ScrollView.bottom
  • ContentView.trailing == ScrollView.trailing
  • ContentView.width == ScrollView.width
  • VerticalStackView.top == ContentView.top + 16
  • VerticalStackView.leading == ContentView.leading + 16
  • VerticalStackView.bottom == ContentView.bottom - 16
  • VerticalStackView.trailing == ContentView.trailing - 16

Вместо View в первых четырех ограничениях вы также можете использовать SafeAreaLayoutGuide (в зависимости от ваших потребностей).

настройка

person André Slotta    schedule 09.06.2018
comment
К сожалению, не сработало. Смотрите результат в обновлении моего вопроса. - person pairon; 09.06.2018
comment
Я думал, вы уже установили базовые ограничения. Обновлен мой ответ со всеми необходимыми ограничениями. - person André Slotta; 09.06.2018
comment
Это правильный путь, но я не могу установить отступ + 16 от UIScrollView. Смотрите мое обновление - person pairon; 09.06.2018
comment
Вы можете использовать дополнительный вид контента (обычный UIView) в качестве подвида прокрутки и поместить свой вертикальный стек в этот вид контента с нужными вам полями. Смотрите мой обновленный ответ. - person André Slotta; 09.06.2018
comment
Ок, спасибо, сейчас попробую. Не могли бы вы объяснить мне, почему в любом случае возникают эти проблемы с ограничениями? - person pairon; 09.06.2018
comment
Сделанный! Благодарю вас! Возможно, проблема в том, что я установил OuterStackView.width == ScrollView.width - person pairon; 09.06.2018
comment
Когда вы устанавливаете ширину вертикального стека равной ширине прокрутки (которая является шириной устройства), все в порядке (например, 320 == 320). но установка одинаковой ширины, а также начального и конечного поля 16 приводит к конфликтующим ограничениям, поскольку ширина представлений не может быть одинаковой, когда вокруг стека есть поле. чтобы исправить это, вы можете установить ширину стека равной ширине прокрутки - 32. - person André Slotta; 09.06.2018