当我有一个TabView{}
并且第一个标签页有一个NavigationView
时,当我单击Row
时,我希望该TabView{}
消失。我该怎么办?
此处是同一期杂志:How to hide the TabBar when navigate with NavigationLink in SwiftUI?
但不幸的是没有解决办法。
答案 0 :(得分:1)
为解决此限制,我提出了这种方法:
enum Tabs: Int {
case tab1
case tab2
var title: String {
switch self {
case .tab1: return "Tab 1 Title"
case .tab2: return "Tab 2 Title"
}
}
var imageName: String {
switch self {
case .tab1: return "star" // Example using SF Symbol
case .tab2: return "ellipsis.circle"
}
}
}
ContentView.swift
,添加了这样的属性:@State private var selectedTab = Tabs.tab1
NavigationView {
TabView(selection: $selectedTab) {
ViewExample1()
.tabItem {
Image(systemName: Tabs.tab1.imageName)
Text(Tabs.tab1.title)
}.tag(Tabs.tab1)
ViewExample2()
.tabItem {
Image(systemName: Tabs.tab2.imageName)
Text(Tabs.tab2.title)
}.tag(Tabs.tab2)
}
.navigationBarTitle(selectedTab.title)
}
仅此而已。我希望这会有所帮助。
注意:请注意,该解决方法会将TabView隐藏在所有子视图中,如果您只想隐藏在特定视图中,则不会得到您想要的结果
希望苹果公司实现了一个(官方的和适当的)选项,以便尽快隐藏TabView。
答案 1 :(得分:0)
目前无法执行此操作。例如,NavigationView
对其后代响应.navigationBarHidden(_:)
方法,但是TabView
没有等效方法。
如果您要查看此内容,请https://sqlite.org/fts5.html#external_content_tables。
答案 2 :(得分:0)
无法隐藏TabView,因此我必须在ZStack中添加TabView,如下所示:
var body: some View {
ZStack {
TabView {
TabBar1().environmentObject(self.userData)
.tabItem {
Image(systemName: "1.square.fill")
Text("First")
}
TabBar2()
.tabItem {
Image(systemName: "2.square.fill")
Text("Second")
}
}
if self.userData.showFullScreen {
FullScreen().environmentObject(self.userData)
}
}
}
UserData:
final class UserData: ObservableObject {
@Published var showFullScreen = false}
TabBar1:
struct TabBar1: View {
@EnvironmentObject var userData: UserData
var body: some View {
Text("TabBar 1")
.edgesIgnoringSafeArea(.all)
.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
.background(Color.green)
.onTapGesture {
self.userData.showFullScreen.toggle()
}
}
}
全屏:
struct FullScreen: View {
@EnvironmentObject var userData: UserData
var body: some View {
Text("FullScreen")
.edgesIgnoringSafeArea(.all)
.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
.background(Color.red)
.onTapGesture {
self.userData.showFullScreen.toggle()
}
}
}
检查Github上的完整代码
还有其他一些方法,但这取决于视图的结构