Сделайте так, чтобы навигационное представление NavigationLink выполнялось "onShow" - PullRequest
0 голосов
/ 30 апреля 2020

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

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

...