我有 3 个视图 - ContentView()、View1()、View2()。 ContentView() 作为主视图,嵌入在 NavigationView 中。它有一个使用 .sheet() 以模态方式打开 View1() 的按钮。 View1 还嵌入到新的 NavigationView 中,并具有导航到 View2() 的 NavigationLink。
问题是我想将 View2() 作为一个新堆栈呈现,但它像 View1() 一样以模态方式呈现。
注意:我必须将 View1() 嵌入到新的 NavigationView 中,因为如果不这样做,那么 NavigationLinks 将无法在其上工作。
import SwiftUI
struct ContentView: View {
@State private var isPresentingView1 = false
var body: some View {
NavigationView {
VStack {
Button("Open View1 Modally") {
isPresentingView1.toggle()
}
.sheet(isPresented: $isPresentingView1) {
View1()
}
}
}
}
}
struct View1: View {
var body: some View {
NavigationView{
NavigationLink("Open View2", destination: View2())
.navigationBarTitle("View 1")
}
}
}
struct View2: View {
var body: some View {
VStack {
Text("View 2 Content")
Spacer()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
我找到了解决方案。如果有人遇到同样的问题,请发布。 “.sheet”中有一个 onDismiss 修饰符,它在工作表被关闭后运行。使用它,我能够实现所需的功能。
struct ContentView: View {
@State private var isPresentingView1 = false
@State private var isNewViewPresented = false
var body: some View {
NavigationView {
VStack {
Button("Open View1 Modally") {
isPresentingView1.toggle()
}
.sheet(isPresented: isPresentingView1, onDismiss: {
isNewViewPresented = true
}) {
View1()
}
.background(
NavigationLink("", destination: View2(), isActive: $isNewViewPresented)
)
}
}
}
}