首页 > 解决方案 > 如何在 SwiftUI 的子视图中隐藏 TabView 叠加层?

问题描述

我有一个带有自定义 TabBar 和覆盖的 TabView:https ://jboullianne.medium.com/custom-tabbar-e8f2ea89d2fc

我能够使用 Introspect 在子视图中隐藏 TabBar:https ://github.com/siteline/SwiftUI-Introspect

但我也想隐藏子视图中的覆盖以完全隐藏 TabBar。

我该如何隐藏它?

我的测试代码试图隐藏 TabBar(工作,请参阅 TestTabBarPage3)和覆盖(如何???):

测试标签栏

struct TestTabBar: View {
    var body: some View {
        TabView {
            TestTabBarPage1()
                .tabItem {
                    Image(systemName: "envelope")
                    Text("TestTabBarPage1")
                }
            
            TestTabBarPage2()
                .tabItem {
                    Image(systemName: "star")
                    Text("TestTabBarPage2")
                }
            
        }
        .overlay(
            Color(#colorLiteral(red: 0.259467423, green: 0.5342320204, blue: 0.7349982858, alpha: 1))
                .frame(height: 50)
                .offset(y: 40)
        )
    }
}

TestTabBarPage1

struct TestTabBarPage1: View {
    var body: some View {
        Text("TestTabBarPage1")
            .navigationBarTitle(Text("TestTabBarPage2"), displayMode:.inline)
    }
}

TestTabBarPage2

struct TestTabBarPage2: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: TestTabBarPage3()) {
                Text("TestTabBarPage3")
            }
            .navigationBarTitle(Text("TestTabBarPage2"), displayMode:.inline)
        }
    }
}

TestTabBarPage3

struct TestTabBarPage3: View {
    @State var uiTabarController: UITabBarController?
    
    var body: some View {
        Text("Hello, World!")
            .navigationBarTitle(Text("TestTabBarPage3"), displayMode:.inline)
            .introspectTabBarController { (UITabBarController) in
                UITabBarController.tabBar.isHidden = true
                uiTabarController = UITabBarController
            }.onDisappear{
                uiTabarController?.tabBar.isHidden = false
            }
    }
}

标签: swiftuiuitabbarcontrolleruitabbarswiftui-tabview

解决方案


推荐阅读