SwiftUI List с ForEach работает в одном VStack, но не во втором - PullRequest
0 голосов
/ 17 июня 2020

Я совершенно не понимаю, почему список, который я пытаюсь создать (с ForEach) в SwiftUI, ведет себя именно так. У меня есть ObservedObject, который я проверил в инспекторе и содержит ожидаемые мной данные. В первом VStack я могу создать список с помощью ForEach, и он отлично выводит. Во втором VStack я не получаю вывода данных.

struct WorkoutPreview: View {
  @Environment(\.managedObjectContext) var managedObjectContext
  @ObservedObject var workoutSessionExercises: WorkoutSessionExercises

  var body: some View {
    NavigationView {
      VStack {
        Text("Welcome to your workout! Below are the exercises and bands you've selected for each.")
          .padding()
        Text("We found \(workoutSessionExercises.workoutExercises.count) workouts.")
          .padding()

        // This List (with ForEach) works fine and produces output.
        List {
          ForEach(0..<workoutSessionExercises.workoutExercises.count) { index in
            Text(self.workoutSessionExercises.workoutExercises[index].exerciseName)
          }
        }
      }

      // The exact same List (with ForEach) in this VStack produces no results.
      VStack {
        List {
          ForEach(0..<workoutSessionExercises.workoutExercises.count) { index in
            Text(self.workoutSessionExercises.workoutExercises[index].exerciseName)
          }
        }
      }

      Spacer()
    }
  }
}

1 Ответ

0 голосов
/ 17 июня 2020

проблема в том, что у вас есть 2 виртуальных стека, которые не расположены один под другим в представлении, поэтому вы не можете увидеть второй список. Чтобы решить вашу проблему, оберните ваши VStacks в другой VStack, например:

var body: some View {
    NavigationView {
        VStack {   //  <------
            VStack {
                Text("Welcome to your workout! Below are the exercises and bands you've selected for each.").padding()
                Text("We found \(workoutSessionExercises.workoutExercises.count) workouts.").padding()
                // This List (with ForEach) works fine and produces output.
                List {
                    ForEach(0..<workoutSessionExercises.workoutExercises.count) { index in
                        Text(self.workoutSessionExercises.workoutExercises[index].exerciseName)
                    }
                }
            }
            // The exact same List (with ForEach) in this VStack produces no results.
            VStack {
                List {
                    ForEach(0..<workoutSessionExercises.workoutExercises.count) { index in
                        Text(self.workoutSessionExercises.workoutExercises[index].exerciseName)
                    }
                }
            }
            Spacer()
        }         //  <------
    }
}
...