Я создаю фитнес-приложение, в котором пользователь выбирает одну из программ из списка, и когда он нажимает на выбранную программу, появляется новое представление с воспроизведением видео (на видео есть таймер обратного отсчета).
Я построил экран, используя 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 не видны. Это почему? Как сделать их видимыми?
DeferView
оболочку для назначения ссылки из моего ответа в Как я могу снова инициализировать View Again в SwiftUI? ... почему не пять вопросов в одном посте? ;) - person Asperi   schedule 30.04.2020