[英]hide TabView after clicking on a NavigationLink in SwiftUI
當我有一個TabView{}
並且第一個 Tab 有一個NavigationView
時,當我點擊一個Row
時,我希望那個TabView{}
消失。 我怎么做?
同樣的問題: 如何在 SwiftUI 中使用 NavigationLink 導航時隱藏 TabBar?
但不幸的是沒有解決方案。
目前沒有辦法做到這一點。 例如, NavigationView
響應其后代的.navigationBarHidden(_:)
方法,但TabView
沒有等效項。
如果這是您想看到的,請讓 Apple 知道。
沒有辦法隱藏 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)
}
}
}
用戶數據:
final class UserData: ObservableObject {
@Published var showFullScreen = false}
標簽欄1:
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上的完整代碼
還有其他一些方法,但這取決於視圖的結構
為了解決這個限制,我提出了這種方法:
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 隱藏在任何和所有子視圖中,如果您只想隱藏在特定視圖中,這不會為您提供所需的結果。
希望 Apple 很快實現一個(官方和適當的)選項來隱藏 TabView。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.