SwiftUI hidesBottomBarWhenPushed 等效

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

当我在导航堆栈上推送新视图时,我想隐藏选项卡栏。我尝试了这个,它有效,但它不是一个平滑的选项卡动画。有没有办法创建与 UIKit 中的

hidesBottomBarWhenPushed
相同的动画?

struct ContentView: View {
    var body: some View {
        TabView {
            NavigationStack {
                NavigationLink {
                    Text("Detail View")
                        .toolbar(.hidden, for: .tabBar)
                } label: {
                    Text("Navigation Link")
                        .navigationTitle("Home")
                        .navigationBarTitleDisplayMode(.inline)
                }
            }
            .tabItem {
                Label("Home", systemImage: "house")
            }
        }
    }
}
swift swiftui
1个回答
0
投票

好吧,这是可以做到的,但苹果范例建议你不要这样做。我的应用程序中确实发生了完全相同的事情,因为我想从工具栏显示“通知”屏幕。它也嵌套在 TabView 中。您可以执行此操作的方法是创建一些值

$hidesTabBar
,每当您单击导航链接时,该值都会设置为 true 。您可以通过使用
.navigationDestination(isPresented...)
和定义的
Binding<Bool>
将这两个东西结合在一起,该定义监听
.onChange
修饰符的
isPresented
.navigationDestination
。在使该 hack 工作时,您将遇到一些奇怪的情况,即您需要将该绑定传递给
TabView
中的每个视图或将其添加到
.environment

既然你已经有了一个可行的解决方案,你应该知道苹果是如何看待这个问题的。如果你查看他们所有具有 TabView 的本机应用程序,他们总是使用

.sheet
.popover
或带有
.fullscreenCover
按钮的
Done
。这是用户期望看到的,也是他们习惯看到的。此外,当他们在
TabView
内时,如果他们碰巧因任何特定原因更改了选项卡,他们总是希望被带回到他们离开的地方。这是您应该认真考虑的用户体验问题。

© www.soinside.com 2019 - 2024. All rights reserved.