在 NavigationView 中点击 TabView 中的标签栏不会关闭嵌套的 NavigationView
Tapping on tabbar in TabView while inside a NavigationView won't dismiss nested NavigationViews
我有一个非常基本的设置,其中涉及 TabView
中的 NavigationView
s。在那个 NavigationView
中,用户可以转到其他屏幕。
我希望,就像在我见过的其他每个应用程序中一样,当我点击当前活动选项卡时,它会跳回到初始 NavigationView
,忽略所有其他 NavigationView
s在该选项卡中处于活动状态。但是,当我按下活动标签时,没有任何反应。
是否有 属性 我必须设置才能使这项工作正常进行?
您所描述的不是标准的 SwiftUI 行为,更糟糕的是,您无法检测到 TabBar 图标上的第二次点击。我知道的唯一方法是使用自定义 TabBar 设置,例如像这样:
struct ContentView: View {
@State private var currentTab = "Analytics"
var body: some View {
VStack {
TabView(selection: $currentTab) {
VStack {
Text("Home Tab")
}
.tag("Home")
VStack {
Text("Analytics Tab")
}
.tag("Analytics")
}
Divider()
HStack {
TabBarButton(imageName: "house.fill", label: "Home", current: $currentTab)
TabBarButton(imageName: "chart.bar.fill", label: "Analytics", current: $currentTab)
}
}
}
}
struct TabBarButton: View {
let imageName: String
let label: String
@Binding var current: String
var body: some View {
Button {
if current == label {
// reset your view
print("reset")
}
current = label
} label: {
VStack {
Image(systemName: imageName)
Text(label)
}
}
.padding()
}
}
我有一个非常基本的设置,其中涉及 TabView
中的 NavigationView
s。在那个 NavigationView
中,用户可以转到其他屏幕。
我希望,就像在我见过的其他每个应用程序中一样,当我点击当前活动选项卡时,它会跳回到初始 NavigationView
,忽略所有其他 NavigationView
s在该选项卡中处于活动状态。但是,当我按下活动标签时,没有任何反应。
是否有 属性 我必须设置才能使这项工作正常进行?
您所描述的不是标准的 SwiftUI 行为,更糟糕的是,您无法检测到 TabBar 图标上的第二次点击。我知道的唯一方法是使用自定义 TabBar 设置,例如像这样:
struct ContentView: View {
@State private var currentTab = "Analytics"
var body: some View {
VStack {
TabView(selection: $currentTab) {
VStack {
Text("Home Tab")
}
.tag("Home")
VStack {
Text("Analytics Tab")
}
.tag("Analytics")
}
Divider()
HStack {
TabBarButton(imageName: "house.fill", label: "Home", current: $currentTab)
TabBarButton(imageName: "chart.bar.fill", label: "Analytics", current: $currentTab)
}
}
}
}
struct TabBarButton: View {
let imageName: String
let label: String
@Binding var current: String
var body: some View {
Button {
if current == label {
// reset your view
print("reset")
}
current = label
} label: {
VStack {
Image(systemName: imageName)
Text(label)
}
}
.padding()
}
}