SwiftUI TabView 在更改可见性时有延迟

问题描述 投票:0回答:2

我有一个 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")
            }
        }
    }
}

延迟可以在下面的GIF中看到

老实说,在我看来,这个原生功能有问题。我尝试了 SwiftUI Introspect 包,但也遇到了延迟。

这个问题有解决办法吗?

ios swift xcode swiftui tabview
2个回答
0
投票

稍微更改了代码,将 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")
        }
    }
}

0
投票

通过在

.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") }
                
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.