我有一个 TabView,在某个子视图中我想隐藏工具栏。这可以通过
.toolbar(.hidden, for: .tabBar)
来完成。问题是当工具栏再次可见时:工具栏需要很长时间才能再次显示。
可以使用以下代码轻松重现:
struct ContentView: View {
var body: some View {
TabView {
NavigationStack {
NavigationLink("Tap Me") {
Text("Detail View")
.toolbar(.hidden, for: .tabBar)
}
.navigationTitle("Primary View")
}
.tabItem {
Label("Home", systemImage: "house")
}
}
}
}
老实说,在我看来,这个原生功能有问题。我尝试了 SwiftUI Introspect 包,但也遇到了延迟。
这个问题有解决办法吗?
稍微更改了代码,将 NavigationStack 放在 TabBar 上,因为您可以像主视图一样指定导航堆栈。所以它工作正常,没有延迟。
struct SwiftUIView: View {
var body: some View {
NavigationStack {
TabView {
NavigationLink("Tap Me") {
Text("Detail View")
.toolbar(.hidden, for: .tabBar)
}
.tabItem {
Label("Home", systemImage: "house")
}
}
.navigationTitle("Primary View")
}
}
}
通过在
.tabItem
中的每个视图上使用 MainTabView
修饰符,我能够获得与我相信您正在寻找的类似功能。
struct MainTabView: View {
var body: some View {
NavigationStack {
TabView{
ExploreView()
.tabItem { Label("Explore", systemImage: "magnifyingglass") }
WishlistView()
.tabItem { Label("Wishlists", systemImage: "heart") }
ProfileView()
.tabItem { Label("Profile", systemImage: "person") }
}
}
}
}