SwiftUI: Центр содержимого в ScrollView - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь центрировать группу представлений в VStack в ScrollView в SwiftUI.Чтобы упростить вещи, я просто пытаюсь заставить его работать с одним Text представлением.Вот что я придумала до сих пор:

var body: some View {
  ScrollView(alwaysBounceVertical: true){
    HStack(alignment: .center) {
      Spacer()
      Text("This Is a Test")
      Spacer()
    } //HStack
    .background(Color.green)
  } //ScrollView
  .background(Color.gray)
}

Это приводит к следующему:

enter image description here

Я хочу текстчтобы быть в середине, как это:

enter image description here

Таким образом, HStack должен быть во всю ширину, а Text должен быть центрирован внутри него.Кажется, это должно быть легко, но я не понимаю, что я делаю неправильно.:)

Ответы [ 2 ]

2 голосов
/ 15 июня 2019

Используя GeometryReader, вы можете получить информацию о размере вмещающего представления и использовать ее для изменения размера вашего представления.

    var body: some View {
        GeometryReader { geometry in                <--- Added
            ScrollView(alwaysBounceVertical: true){
                HStack(alignment: .center) {
                    Spacer()
                    Text("This Is a Test")
                    Spacer()
                } //HStack
                .frame(width: geometry.size.width)  <--- Added
                .background(Color.green)
            } //ScrollView
        .background(Color.gray)
    }
}

edit: после более подробного изучения кажется, что часть проблемы заключается в том, чточто вы используете ScrollView.Если вы удалите этот родительский элемент, разделители в HStack автоматически вызовут растяжение, чтобы заполнить представление.Я предполагаю, что автоматическое растяжение не происходит в ScrollViews, потому что нет предела тому, насколько большим он может быть, насколько он будет растягиваться?(потому что ScrollView может прокручивать в любом направлении)

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

Это, похоже, ошибка в бета-версии Xcode 11.0, ScrollView содержимое не будет заполнять представление прокрутки. Если вы замените ScrollView на List, он будет работать как положено. Но если вам нужно использовать представление прокрутки, один из обходных путей - исправить содержимое представления прокрутки width .

Итак, ваш код будет выглядеть примерно так:

ScrollView(alwaysBounceVertical: true) {
  HStack(alignment: .center) {
    Spacer()
    Text("This Is a Test")
    Spacer()
  } // HStack
  .frame(width: UIScreen.main.bounds.width) // set a fixed width
  .background(Color.green)
} // ScrollView
.background(Color.gray)

Результат:

enter image description here

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