我正在构建一个健身应用,其中用户从列表中选择一个程序,当他单击选定的程序时,会出现一个新视图,其中包含视频播放(视频上带有倒数计时器)。
我使用NavigationView / NavigationLink构建了一个屏幕,每个屏幕都有其“目标视图”及其自己的参数。
let sets: [TrainingSet]
init() {
self.sets = [set1,set2,set3]
}
var body: some View {
NavigationView {
VStack {
ForEach(self.sets) { set in
NavigationLink(destination: ExerciseVideoView(items: set.items).navigationBarBackButtonHidden(true)) {
VStack {
Image("group-\(set.image)")
.resizable()
.renderingMode(.original)
.frame(height: 200, alignment: .leading)
.overlay(
Text(set.purpose)
.font(.largeTitle)
.fontWeight(.semibold)
.foregroundColor(.white)
)
Color.blue
.frame(maxWidth: .infinity)
.overlay(
Text(set.purpose)
.foregroundColor(.white)
)
}
}
}
}
}
}
1)我注意到,在构建父视图时,甚至在用户单击相应按钮之前,所有目标视图( ExerciseVideoView )都会执行。我的倒数计时器在后台启动。我应该看到它们是在用户单击NavigationLink并“执行”新视图时启动的。那是正确的行为吗?显示目标视图时,可以使它们“执行/启动”吗?
2)第二个问题是我想在每个图像下方显示带有蓝色按钮的图像(我将它们都放在VStack容器中)。但是,当我启动我的应用程序时,仅显示图像,但“ Color.blue”矩形不可见。这是为什么?如何使它们也可见?