导航栏前面的 SwiftUI 视图

Mat*_*tis 6 uinavigationcontroller ios swift swiftui

在我正在制作的 iOS 应用程序中,我使用 NavigationLink 从主视图转到另一个视图。我希望两个视图的导航栏中都存在一个按钮,该按钮将在视图中的所有内容之上叠加模糊效果。在主视图中,模糊效果很好,但在第二个视图中,导航栏和导航栏标题不会变得模糊,并保持在模糊视图的顶部。

如何使导航视图出现在第二个视图中的模糊下方?

主视图:

var body: some View {
    ZStack {
        NavigationView {
            ScrollView(.vertical) {
                . . .
            }
            .navigationBarItems(
            leading: Button(action: {
                    showBlurView.toggle()
                }) {
                    Text("Show blur view")
                }
            ),
            trailing: Button(action: {
                    NavigationLink(destination: SecondView()) {
                        Text("2nd view")
                    }
                }
            )
        }
        
        BlurEffectView(style: .systemThinMaterial)
            .edgesIgnoringSafeArea(.all)
            .hidden(showBlurView == true ? false : true)

    }
}
Run Code Online (Sandbox Code Playgroud)

第二个视图:

var body: some View {
    ZStack {
        VStack {
            ...
        }.navigationBarTitle("Second View")

    BlurEffectView(style: .systemThinMaterial)
            .edgesIgnoringSafeArea(.all)
            .hidden(showBlurView == true ? false : true)
            
    }
}
Run Code Online (Sandbox Code Playgroud)

BlurEffectView 的代码:

struct BlurEffectView: UIViewRepresentable {
    let style: UIBlurEffect.Style = .systemMaterial

    func makeUIView(context: Context) -> UIVisualEffectView {
        return UIVisualEffectView(effect: UIBlurEffect(style: style))
    }

    func updateUIView(_ uiView: UIVisualEffectView, context: Context) {
        uiView.effect = UIBlurEffect(style: style)
    }
}
Run Code Online (Sandbox Code Playgroud)