ios 在SwiftUI中使用NavigationLink导航时如何隐藏TabBar?

gopyfrb3  于 2022-12-20  发布在  iOS
关注(0)|答案(3)|浏览(596)

我有一个TabView,其中有2个选项卡,每个选项卡包含一个NavigationView。当导航到另一个视图时,我需要隐藏TabBar。一个解决方案是将TabView放在一个NavigationView中,但我必须为每个NavigationView设置不同的属性。

TabView(selection: $selectedTab, content: {
            NavigationView {
                VStack {
                    NavigationLink(destination: Text("SecondView Tab1")) {
                        Text("Click")
                    }
                }
            }.tabItem {
                Text("ONE")
            }.tag(0)

            NavigationView {
                VStack {
                    NavigationLink(destination: Text("SecondView Tab2")) {
                        Text("Click")
                    }
                }
            }.tabItem {
                Text("TWO")
            }.tag(1)

        })

P.S.我使用的是Xcode 11 Beta 5

pxy2qtax

pxy2qtax1#

你不能隐藏标签栏,据我所知,如果你的导航视图列为一个孩子,你的标签栏包含你的导航视图。

wtlkbnrh

wtlkbnrh2#

有点晚,但它会工作,把你的导航视图之前的标签视图和标签按钮将被隐藏,当你使用导航链接在你的标签视图。

NavigationView{
    TabView{
        ...
    }
}
wn9m85ua

wn9m85ua3#

我也有同样的问题我采取了以下措施来解决这个问题:
1.使用NavigationView Contain a TabViewHidden the NavigationBar
1.创建如下所示的自定义NavigaitonView
1.在下一个视图中仍隐藏NavigationBar

// root tab
NavigationView {
    TabView {
        // some
    }
    .navigationBarTitle(xxx, displayMode: .inline)
    .navigationBarHidden(true)
}
// custom navigation view
@available(iOS 13.0.0, *)
struct MyNavigationView: View {
    var body: some View {
        HStack {
            Spacer()
            Text(some)
            Spacer()
        }
        .frame(height: 44)
    }
}
// this view 
VStack {
                MyNavigationView()
                Image(some)
                    .resizable()
                    .frame(width: 100, height: 100, alignment: .top)
                    .padding(.top, 30)
                Spacer()
                HStack {
                    ClockView()
                    Spacer()
                    NavigationLink(
                        destination: DynamicList(),
                        label: {
                            Image(some)
                        }).navigationBarHidden(true)
                }
                .padding(EdgeInsets(top: 0, leading: 15, bottom: 0, trailing: 15))
                
                Spacer()
            }
// next view
var body: some View {
            VStack {
                List {
                    MyNavigationView()
                    ForEach(date, id: \.self) { model in
                        Text(model)
                    }
                }
                .navigationBarHidden(true)
                .navigationBarTitle(some, displayMode: .inline)
            }
    }

相关问题