NavigationView 栏材质在 iOS 15 上不可见

Geo*_*e_E 6 swift swiftui swiftui-navigationview

NavigationView在 iOS 15 上,具有with模式的应用程序.inline不再显示您在导航栏上看到的模糊材质颜色。

示例代码:

struct ContentView: View {
    var body: some View {
        NavigationView {
            ZStack {
                Color.red.ignoresSafeArea()
                
                Text("Content")
            }
            .navigationBarTitleDisplayMode(.inline)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

比较:

iOS 14.4 iOS 15
iOS 14.4 结果 iOS 15 结果

如何修复此问题以保持 iOS 14 的行为?

Geo*_*e_E 0

虽然它并不完美,但有一种方法可以使用SwiftUI-Introspect来解决这个问题。

它仍然存在一个问题,即对于第一次渲染,更改尚未生效。

我找到的解决方案是从这里部分发现的。

通过 Introspect,我添加了以下代码:

NavigationView {
    /* ... */
}
.introspectNavigationController { navController in
    navController.navigationBar.scrollEdgeAppearance = navController.navigationBar.standardAppearance
    navController.navigationBar.isTranslucent = true
}
Run Code Online (Sandbox Code Playgroud)

现在它可以工作了,但如果有 100% SwiftUI 解决方案就更好了。