5

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

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

主列表视图非常顶部 主列表视图滚动

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

列表视图非常顶部 列表视图滚动

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

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

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

4

3 回答 3

4

在 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
    } 
于 2021-11-27T21:47:48.487 回答
0

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

于 2021-09-09T20:21:25.087 回答
0

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

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

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

    if #available(iOS 15, *) {
        let appearance = UINavigationBarAppearance()
        appearance.configureWithOpaqueBackground()
        self.tabBarController?.navigationController?.navigationBar.scrollEdgeAppearance = appearance
    }
于 2021-10-12T05:16:07.070 回答