嵌套选项卡视图-删除内部选项卡栏iOS 13,Swift UI

嵌套选项卡视图-删除内部选项卡栏iOS 13,Swift UI,swift,swiftui,swiftui-tabview,Swift,Swiftui,Swiftui Tabview,我使用选项卡视图来表示三个选项卡。在iOS 14中,这一点处理得很好,但iOS 13会产生一个灰色的底部栏,它是用于导航的选项卡栏。我如何才能移除此栏 请记住,这是选项卡视图中的选项卡视图。外部选项卡视图的栏显示在底部,有五个选项卡;内部选项卡视图栏我根本不想显示 下面的代码表示内部选项卡视图 import SwiftUI struct DashboardView: View { @State private var pageIndex = 1 var body: s

我使用
选项卡视图
来表示三个选项卡。在iOS 14中,这一点处理得很好,但iOS 13会产生一个灰色的底部栏,它是用于导航的选项卡栏。我如何才能移除此栏

请记住,这是
选项卡视图中的
选项卡视图
。外部
选项卡视图
的栏显示在底部,有五个选项卡;内部
选项卡视图
栏我根本不想显示

下面的代码表示内部
选项卡视图

import SwiftUI

struct DashboardView: View {
    @State private var pageIndex = 1
    
    var body: some View {
        VStack {
            DashboardTopBar(index: $pageIndex) // A custom selected tab indicator
            if #available(iOS 14.0, *) {
                TabView(selection: $pageIndex) {
                    RehabView().tag(0)
                    PerformanceView().tag(1)
                    RecoveryView().tag(2)
                }
                .tabViewStyle(PageTabViewStyle())
                .indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always))
            } else {
                TabView(selection: $pageIndex) {
                    RehabView().tag(0)
                    PerformanceView().tag(1)
                    RecoveryView().tag(2)
                }
            }
        }
    }
}
下图显示iOS 13位于左侧,iOS 14位于右侧

最小、完整且可验证的示例

如果下面的代码是在iOS 13上启动的,您会注意到底部有一个选项卡栏,顶部有一个空选项卡栏

import SwiftUI

struct ContentView: View {
    @State private var outerTabViewSelectedTab = 0
    @State private var innerTabViewSelectedTab = 1
    var body: some View {
        TabView(selection: $outerTabViewSelectedTab,
                content:  {
                    Text("Outer 1").tabItem { Text("Outer 1") }.tag(1)
                    TabView(selection: $innerTabViewSelectedTab,
                            content:  {
                                Text("Inner 1").tag(1)
                                Text("Inner 2").tag(2)
                            }).tabItem { Text("Outer 2") }.tag(2)
                })
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

显式隐藏它。。。因为向后兼容性是安全的,因为行为是已知的,不会改变

所以这里有一个解决方案

var body: some View {
    TabView(selection: $outerTabViewSelectedTab,
            content:  {
                Text("Outer 1").tabItem { Text("Outer 1") }.tag(1)
                TabView(selection: $innerTabViewSelectedTab,
                        content:  {
                            Text("Inner 1").tag(1)
                             .background(TabBarAccessor { tabBar in
                                tabBar.isHidden = true
                             })
                            Text("Inner 2").tag(2)
                        }).tabItem { Text("Outer 2") }.tag(2)
            })
}

从我的另一个解决方案中使用了
TabBarAccessor
。indexViewStyle(PageIndexViewStyle(backgroundDisplayMode:.no))@Dc7不幸的是,
。indexViewStyle
PageIndexViewStyle
仅在iOS 14中可用。我特别寻找iOS 13。我想,你必须用UIViewRepresentable创建它!!!这回答了你的问题吗?@Asperi没有,对不起。我尝试了半透明的
true
false
两个值,但该条仍然保留。其他选项卡包含列表视图,并且栏与项目重叠。太棒了!当然,对于那些好奇的人来说,
.background
修饰符需要应用于所有希望隐藏选项卡栏的选项卡。谢谢