1

我的应用程序有许多被推送到导航堆栈上的 ViewController。

我已经在 AppDelegate 中全局配置了 UINavigationBar 外观,如下所示。

let appearance = UINavigationBar.appearance()
appearance.barTintColor = myColor
appearance.tintColor = .white
appearance.isTranslucent = false
let textAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white,
                      NSAttributedString.Key.font: myFont, size: mySize)]
appearance.titleTextAttributes = textAttributes as [NSAttributedString.Key : Any]

除了只有一个 ViewController 之外,所有 ViewController 都按预期工作。

以下是按预期工作的 VC 之一。它显示了我想要的颜色和字体。

在此处输入图像描述

下面是显示不同外观的 ViewController。

在此处输入图像描述

我不明白为什么这个 VC 上只有一个导航栏显示不同的外观。

所以我已经完成了调试视图层次结构。

下面是按预期工作的 VC 的视图层次结构。

在此处输入图像描述

下面是显示奇怪外观的 VC 视图层次结构。

在此处输入图像描述

如图所示,有问题的 NavigationBar 多了两层,UIVisualEffectView 和 UIVisualEffectBackdropView。

我是一位经验丰富的 iOS 开发人员,不知道为什么会发生这种情况。

我仔细检查了IB上与NavigationBar相关的所有设置,但发现与其他设置没有区别。

我什至删除了 ViewController,完全嵌入 NavigationController 并从头开始重建它们,但没有运气。

请有人解释一下为什么只有这个 NavigationBar 有不同的结构。

我正在使用 iOS 13.3 和 Xcode 11.3.1

4

1 回答 1

0

在 iOS15 上工作,我尝试了很多东西来自定义导航栏外观以实现简单的不透明颜色,除了这个没有任何效果:

在 viewDidLoad

if (@available(iOS 13.0, *)) {
        UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
         appearance.backgroundColor = [UIColor orangeColor];
        self.navigationController.navigationBar.standardAppearance = appearance;
        self.navigationController.navigationBar.scrollEdgeAppearance = appearance;
}

斯威夫特版本:

let appearance = UINavigationBarAppearance()
appearance.backgroundColor = .orange
navigationBar.standardAppearance = appearance;
navigationBar.scrollEdgeAppearance = navigationBar.standardAppearance

最后,如果您只想在当前控制器上应用它,并恢复默认导航栏,只需在 viewWillDisappear 上使用新的 UINavigationBarAppearance() 即可。

于 2021-09-30T14:37:18.540 回答