SwiftUI - 带有嵌套 NavigationViews 的 TabView 重置 Navigationflow
SwiftUI - TabView with nested NavigationViews resets Navigationflow
我有一个带有导航视图的 TabView。
struct ContentView: View {
var body: some View {
TabView {
NavigationView {
NavigationLink("Link to my first Navigation Level", destination: MyFirstView())
}
.tabItem {
Image(systemName: "house")
Text("Home")
}.tag(0)
NavigationView {
Text("Second Nav Page")
}
.tabItem {
Image(systemName: "gear")
Text("Settings")
}.tag(1)
}
}
}
struct MyFirstView: View {
@State var selectedTag: String?
var body: some View {
VStack {
Text("My First View")
NavigationLink("(Working) Link to my second Navigation Level", destination: MySecondView())
Text("But the Button in the Navigation Bar doesn't work")
}
.navigationBarTitle("My First View", displayMode: .inline)
.navigationBarItems(
leading: HStack {
NavigationLink(destination: MySecondView(), tag: "xx", selection: $selectedTag ){
Button(action: {
print("Settings button pressed...")
self.selectedTag = "xx"
}) {
Image(systemName: "gearshape.2.fill").imageScale(.large)
}
}
}
)
}
}
struct MySecondView: View {
var body: some View {
Text("My Second View")
}
}
现在我有一个超级奇怪的行为。如果我单击“Link 到我的第一个导航级别”,然后单击“(工作)Link 到我的第二个导航级别”,旅程就会开始。如果我在第二个导航级别中单击“后退”,它将返回到第一个导航级别。
问题:
当我在第一个导航级别上单击导航栏中的齿轮符号时,它有点脱离嵌套导航并将其设置到顶层。结果是,当我单击“后退”时,它会将我从第二个导航级别带回到最根屏幕,但我的预期行为是它应该返回到第一个导航级别。
知道我做错了什么吗?我正在使用 Xcode 12.2 beta 3 和 iOS 14.2(不确定它是否是测试版错误)。
非常感谢!
这成功了(感谢@Asperi)。必须在 tabBarItems
之外
NavigationLink(destination: AddDetailView(existingItem: nil),
isActive: $addMode) { EmptyView() }
我有一个带有导航视图的 TabView。
struct ContentView: View {
var body: some View {
TabView {
NavigationView {
NavigationLink("Link to my first Navigation Level", destination: MyFirstView())
}
.tabItem {
Image(systemName: "house")
Text("Home")
}.tag(0)
NavigationView {
Text("Second Nav Page")
}
.tabItem {
Image(systemName: "gear")
Text("Settings")
}.tag(1)
}
}
}
struct MyFirstView: View {
@State var selectedTag: String?
var body: some View {
VStack {
Text("My First View")
NavigationLink("(Working) Link to my second Navigation Level", destination: MySecondView())
Text("But the Button in the Navigation Bar doesn't work")
}
.navigationBarTitle("My First View", displayMode: .inline)
.navigationBarItems(
leading: HStack {
NavigationLink(destination: MySecondView(), tag: "xx", selection: $selectedTag ){
Button(action: {
print("Settings button pressed...")
self.selectedTag = "xx"
}) {
Image(systemName: "gearshape.2.fill").imageScale(.large)
}
}
}
)
}
}
struct MySecondView: View {
var body: some View {
Text("My Second View")
}
}
现在我有一个超级奇怪的行为。如果我单击“Link 到我的第一个导航级别”,然后单击“(工作)Link 到我的第二个导航级别”,旅程就会开始。如果我在第二个导航级别中单击“后退”,它将返回到第一个导航级别。
问题:
当我在第一个导航级别上单击导航栏中的齿轮符号时,它有点脱离嵌套导航并将其设置到顶层。结果是,当我单击“后退”时,它会将我从第二个导航级别带回到最根屏幕,但我的预期行为是它应该返回到第一个导航级别。
知道我做错了什么吗?我正在使用 Xcode 12.2 beta 3 和 iOS 14.2(不确定它是否是测试版错误)。
非常感谢!
这成功了(感谢@Asperi)。必须在 tabBarItems
之外 NavigationLink(destination: AddDetailView(existingItem: nil),
isActive: $addMode) { EmptyView() }