首页 > 解决方案 > 使 NavigationLink 目标视图执行“onShow”

问题描述

我正在构建一个健身应用程序,用户从列表中选择一个程序,当他单击所选程序时,会出现一个新视图并播放视频(视频上有倒数计时器)。

我使用 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”矩形不可见。这是为什么?如何使它们也可见?

标签: swiftuiswiftui-navigationlink

解决方案


推荐阅读