Сделать вид назначения NavigationLink выполненным на Show

Я создаю фитнес-приложение, в котором пользователь выбирает одну из программ из списка, и когда он нажимает на выбранную программу, появляется новое представление с воспроизведением видео (на видео есть таймер обратного отсчета).

Я построил экран, используя 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 не видны. Это почему? Как сделать их видимыми?


person eugene_prg    schedule 30.04.2020    source источник
comment
Куда вы положили код обратного отсчета? в файле swiftUI? или внутри ObservableObject, например ViewModel? дайте мне знать, чтобы я мог вам помочь.   -  person Md. Yamin Mollah    schedule 30.04.2020
comment
Использовать DeferView оболочку для назначения ссылки из моего ответа в Как я могу снова инициализировать View Again в SwiftUI? ... почему не пять вопросов в одном посте? ;)   -  person Asperi    schedule 30.04.2020
comment
Спасибо ребята! Asperi: помогло добавление DeferView!   -  person eugene_prg    schedule 30.04.2020
comment
Md. Yamin Mollah: Я поместил код обратного отсчета в файл swiftui, а не в ViewModel.   -  person eugene_prg    schedule 30.04.2020
comment
Взгляните на этот stackoverflow.com/a/61234030/4080925   -  person MwcsMac    schedule 30.04.2020