簡體   English   中英

單擊 SwiftUI 中的 NavigationLink 后隱藏 TabView

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM