如何在 SwiftUI 中对 navigationBarHidden 进行动画处理?

Mar*_*ark 7 hidden navigationbar swift swiftui

struct ContentView: View {
    @State var hideNavigationBar: Bool = false
    
    var body: some View {
        NavigationView {
            ScrollView {
                VStack {
                    Rectangle().fill(Color.red).frame(height: 50)
                        .onTapGesture(count: 1, perform: {
                            withAnimation {
                                self.hideNavigationBar.toggle()
                            }
                        })
                    VStack {
                        ForEach(1..<50) { index in
                            HStack {
                                Text("Sample Text")
                                Spacer()
                            }
                        }
                    }
                }
            }
            .navigationBarTitle("Browse")
            .navigationBarHidden(hideNavigationBar)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当您点击红色矩形时,它会弹出导航栏。我以为withAnimation{}可以解决这个问题,但事实并非如此。你UIKit会做这样的事情navigationController?.setNavigationBarHidden(true, animated: true)

在 xCode 12 beta 6 和 xCode 11.7 中测试

小智 9

你可以尝试使用

.navigationBarHidden(hideNavigationBar).animation(.linear(duration: 0.5))代替 .navigationBarHidden(hideNavigationBar)

并且也移出 self.hideNavigationBar.toggle()动画块。如果您使用上述方法通过动画隐藏导航栏,则不需要这样做。

  • 真的还在工作吗?我尝试过,它只为“工具栏”项目设置动画,而不是导航栏本身。 (3认同)