【问题标题】:Navigation bar is transparent when scrolling starts in iOS15 only仅在 iOS15 中开始滚动时导航栏是透明的
【发布时间】:2021-11-06 04:02:34
【问题描述】:

我一直在寻找不同的解决方案,I keep seeing repeatedly 是将滚动边缘外观设置为标准外观。我还查看了this 解决方案。这两种解决方案都不适合我。一旦用户到达可滚动内容的末尾,我也没有看到这个问题出现,这就是我认为的滚动边缘。我看到问题发生在用户开始在长列表中滚动。我在下面附上了照片,机密数据模糊不清。在我的应用程序中,导航栏看起来正确的唯一位置是在主视图中。我的应用程序架构是主要细节。它在 iOS 14 的所有导航栏中都能正常工作,这个问题是 iOS 15 特有的。

场景 1:主视图控制器列表视图(滚动开始后导航栏看起来正确)

场景 2:在 MVC 表格上选择一个项目后(导航栏是透明的,一旦开始滚动就不会模糊)

这是我在情节提要中的当前视图,其中标准和滚动边缘的默认值。

除了将滚动边缘外观设置为标准之外,我还尝试了一些方法:

  1. 在 Scroll Edge Appearances 中取消选中透明
  2. 更改模糊样式(标准和滚动边缘)
  3. 设置背景颜色

【问题讨论】:

    标签: ios swift uinavigationbar ios15


    【解决方案1】:

    我也遇到了同样的问题。我注意到,如果我屏蔽了设置背景颜色的代码(通过 ZStack 或 .background(Color)),透明度问题就消失了。 在我的情况下,我需要设置背景颜色并制定了一种解决方法,将导航栏保留为白色而不是辅助系统背景颜色。

    【讨论】:

    • 你能分享更多关于你的解决方案的细节吗?就我而言,我从不设置背景颜色,因为我更喜欢原生外观,或者至少它应该看起来像/在 iOS14 中看起来像什么。我尝试将背景颜色设置为 secondarySystemBackground 颜色,但在透明度问题方面看起来完全一样。
    • 回答后,我意识到您使用的是UIKit,而我的情况是使用SwiftUI。除了设置导致透明度问题的背景颜色的情况外,我还注意到如果我将 NavigationViewStyle 设置为 DoubleColumn。不确定这是否有助于您在 UIKit 中进行设置。
    【解决方案2】:

    大多数解决方案似乎只为 navigationController.navigationBar 创建新外观。但是,如果您有一个带有导航控制器的 tabBarController,则需要将外观分配给 tabBarController,如下所示。

    以下是为我解决问题的代码。也适用于明暗模式。

    将此代码添加到 tabController 中任何 VC 的 viewDidLoad。

        if #available(iOS 15, *) {
            let appearance = UINavigationBarAppearance()
            appearance.configureWithOpaqueBackground()
            self.tabBarController?.navigationController?.navigationBar.scrollEdgeAppearance = appearance
        }
    

    【讨论】:

    • 我只在页面顶部或底部时才看到这个问题。我的理解是滚动边缘是什么?即使在长列表的中间滚动时,我也能看到它。到目前为止,我发现的每个解决方案都涉及您上面显示的代码,在我打开这个问题之前我已经尝试过。
    【解决方案3】:

    在 iOS 15 中,UIKit 将默认情况下会产生透明背景的 scrollEdgeAppearance 的使用扩展到所有导航栏。 设置 scrollEdgeAppearance 如下代码。它对我有用。

    if #available(iOS 15, *) {
            let appearance = UINavigationBarAppearance()
            appearance.configureWithOpaqueBackground()
            appearance.backgroundColor = < your tint color >
            navigationController?.navigationBar.standardAppearance = appearance;
            navigationController?.navigationBar.scrollEdgeAppearance = navigationController?.navigationBar.standardAppearance
        } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-21
      • 2019-02-20
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 2020-06-22
      相关资源
      最近更新 更多