Как использовать NavigationStack в iOS 16, чтобы мне не приходилось явно создавать ссылку с меткой, которую нужно нажать?
У меня есть представление с анимацией загрузки, в основном, когда этот вызов выполняется, я хочу автоматически перейти к следующему экрану. Раньше с параметром isActive я мог создать пустое представление для ссылки и легко переключать логическое значение в конце вызова.
Я сделал, чтобы DoneLoading переключался так, что когда это правда, приложение будет переходить к ContentView, так как isPresented будет удовлетворен. Однако, когда я запускаю приложение и окончательная анимация заканчивается, представление начинается с начальной анимации.
@State var show = false
@State var isDone: Bool = false
@State var doneLoading = false
@StateObject var viewModel: BumperScreenViewModel
@StateObject var sheetManager = SheetManager()
init(viewModel: @autoclosure @escaping () -> BumperScreenViewModel) {
self._viewModel = .init(wrappedValue: viewModel())
}
var body: some View {
NavigationStack {
VStack {
ZStack {
Color(.trulliGold)
.ignoresSafeArea()
VStack {
if show {
Spacer()
loadAnimation
.frame(width: 150, height: 150)
.task {
try? await viewModel.getDataFromAPI()
try? await Task.sleep(for: Duration.seconds(1))
doneLoading.toggle()
show.toggle()
print("Done")
}
Spacer()
} else {
launchAnimation
}
}
}
}
}
.navigationDestination(isPresented: $doneLoading) {
ContentView()
.environmentObject(sheetManager)
}
}
Единственная эффективная «Навигация», которую мне удалось выполнить, - это вызов ContentView с объектом среды в качестве дополнительного, если еще так это выглядит больше похоже на это (все остальное то же самое, не хотел добавлять еще больше кода) :
doneLoading.toggle()
show.toggle()
print("Done")
}
Spacer()
} else if doneLoading {
ContentView()
.environmentObject(sheetManager)
} else {
launchAnimation
}
}
это хак, которым я не горжусь и не хочу использовать его в приложении.