这不是这里的最佳答案 - 如果您不想要导航栏,它是一种替代方法。请参阅下面Jake 的回答NavigationView
,了解使用&执行此操作的正常方法NavigationLink
。希望这仍然有用或为您指明正确的方向。
如果您只是想NavigationLink
使用 a Binding
,您可以使用与绑定参数相同的NavigationLink
init 。isActive
无论如何,回到答案......</sup>
我为此做了一个视图修饰符。这也意味着没有导航栏。你可以这样称呼它:
.navigate(to: MainPageView(), when: $willMoveToNextScreen)
这可以附加到任何东西上,所以我通常将它附加到身体的末端,例如:
@State private var willMoveToNextScreen = false
var body: some View {
VStack {
/* ... */
}
.navigate(to: MainPageView(), when: $willMoveToNextScreen)
}
代码(记住import SwiftUI
):
extension View {
/// Navigate to a new view.
/// - Parameters:
/// - view: View to navigate to.
/// - binding: Only navigates when this condition is `true`.
func navigate<NewView: View>(to view: NewView, when binding: Binding<Bool>) -> some View {
NavigationView {
ZStack {
self
.navigationBarTitle("")
.navigationBarHidden(true)
NavigationLink(
destination: view
.navigationBarTitle("")
.navigationBarHidden(true),
isActive: binding
) {
EmptyView()
}
}
}
.navigationViewStyle(.stack)
}
}