【问题标题】:NavigationView bar material invisible on iOS 15NavigationView 栏材料在 iOS 15 上不可见
【发布时间】:2021-09-07 10:23:20
【问题描述】:

在 iOS 15 上,NavigationView.inline 模式的应用不再显示导航栏的模糊材质颜色。

示例代码:

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

比较:

iOS 14.4 iOS 15

如何解决此问题以保持 iOS 14 的行为?

【问题讨论】:

  • 我认为这是一个新的设计。与TabView 相同——当背景不滚动时,没有线条。如果您将 ZStack 放入 ScrollView 中,您会恢复原来的行为。
  • @aheze 我在 Twitter 上听说这是“UIKit 中的新功能”的一部分,所以我可能会观看 WWDC 会议,然后使用 Introspect...我希望有更好的解决方案。
  • @workingdog 不幸的是对我不起作用。

标签: swift swiftui swiftui-navigationview


【解决方案1】:

虽然不完美,但有办法解决这个问题,使用SwiftUI-Introspect

还是有一个问题,第一次渲染的变化还没有效果。

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

使用 Introspect,我添加了以下代码:

NavigationView {
    /* ... */
}
.introspectNavigationController { navController in
    navController.navigationBar.scrollEdgeAppearance = navController.navigationBar.standardAppearance
    navController.navigationBar.isTranslucent = true
}

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

【讨论】:

  • 当导航栏总是内联时,这对我来说效果很好,但是在有大导航标题的页面上,它会在标题底部显示灰色背景和线条 - 知道如何恢复大标题的正常透明外观?
  • @sia 我不确定,我放弃了这个并接受了更改。但是,如果您四处寻找 UIKit 解决方案,那么这就是您所需要的。单帧闪光灯对我来说是个大问题,这就是我决定不使用这段代码的原因。
【解决方案2】:

一种解决方法是:

 struct ContentView: View {
    
    var body: some View {
        NavigationView {
            ZStack {
                // choose your color here
                Color(red: 1, green: 0.8, blue: 0.8).ignoresSafeArea()
                Color.red.edgesIgnoringSafeArea(.bottom)
                Text("Content")
            }.navigationBarTitleDisplayMode(.inline)
        }
    }
}

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 2021-05-27
    • 2021-10-28
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    相关资源
    最近更新 更多