带有ForEach的SwiftUI List在一个VStack中工作,但在第二个VStack中不起作用



我完全不知道为什么我试图在SwiftUI中创建的列表(带有ForEach(的行为方式。我有一个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()
}
}
}

问题是你有 2 个 VStack,它们在视图中不是一个低于另一个,因此您看不到第二个列表。 要解决您的问题,请将您的 VStack 包装在另一个 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()
}         //  <------
}
}

最新更新