20

我有一个 iOS 应用程序,自从升级到 Xcode 13 后,我注意到选项卡导航栏有一些特殊的变化。在 Xcode 13 中,选项卡和导航栏上现在有这个黑色区域,在启动应用程序时,选项卡栏和导航栏现在都是黑色的。很奇怪,如果视图有滚动或表格视图,如果我向上滚动,底部标签栏会恢复为白色,如果我向下滚动,导航栏会恢复为白色。

N:B:我已经从 iOS 13 及更高版本强制使用浅色主题:

 if #available(iOS 13.0, *) {
     window!.overrideUserInterfaceStyle = .light
 }

任何人都可以帮助或指出我正确的方向以处理这种特殊性吗?

是否有一个简单的修复方法可以让 Storyboard 重新调整,或者这是我必须手动更改每个视图的情况?

升级前的故事板示例:

在此处输入图像描述

之后:

在此处输入图像描述

(分别)升级前后的模拟器画面:

在此处输入图像描述

4

6 回答 6

23

关于导航栏是黑色的,试试看:

let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.backgroundColor = .red
appearance.titleTextAttributes = [.font: 
UIFont.boldSystemFont(ofSize: 20.0),
                              .foregroundColor: UIColor.white]

// Customizing our navigation bar
navigationController?.navigationBar.tintColor = .white
navigationController?.navigationBar.standardAppearance = appearance
navigationController?.navigationBar.scrollEdgeAppearance = appearance

我写了一篇关于它的新文章。

https://medium.com/@eduardosanti/uinavigationbar-is-black-on-ios-15-44e7852ea6f7

于 2021-09-22T16:40:06.223 回答
14

更新到 XCode 13 和 iOS 15 后,我还遇到了一些关于不同状态的栏背景颜色和项目文本颜色的选项卡栏问题。我修复它的方式:

if #available(iOS 15, *) {
   let tabBarAppearance = UITabBarAppearance()
   tabBarAppearance.backgroundColor = backgroundColor
   tabBarAppearance.stackedLayoutAppearance.selected.titleTextAttributes = [.foregroundColor: selectedItemTextColor]
   tabBarAppearance.stackedLayoutAppearance.normal.titleTextAttributes = [.foregroundColor: unselectedItemTextColor]
   tabBar.standardAppearance = tabBarAppearance
   tabBar.scrollEdgeAppearance = tabBarAppearance
} else {
   UITabBarItem.appearance().setTitleTextAttributes([.foregroundColor: selectedItemTextColor], for: .selected)
   UITabBarItem.appearance().setTitleTextAttributes([.foregroundColor: unselectedItemTextColor], for: .normal)
   tabBar.barTintColor = backgroundColor
 }
于 2021-09-27T11:57:23.260 回答
9

对我来说,我对 Navbar 和 TabBar 都有问题,所以我在AppDelegate

func configureNavigationBarAppearance() {
    let appearance = UINavigationBarAppearance()
    appearance.configureWithOpaqueBackground()
    appearance.backgroundColor = .white
    UINavigationBar.appearance().standardAppearance = appearance
    UINavigationBar.appearance().scrollEdgeAppearance = appearance
}

func configureTabBarAppearance() {
    let appearance = UITabBarAppearance()
    appearance.backgroundColor = .white
    UITabBar.appearance().standardAppearance = appearance
    UITabBar.appearance().scrollEdgeAppearance = appearance
}
于 2021-10-27T13:30:19.727 回答
1

您可以在情节提要中执行此操作,方法是选择选项卡栏并在属性检查器中选择标准和滚动边缘外观,将它们的设置设置为与 iOS 13 一样,对于自定义字体或颜色,您需要更改标准布局外观堆叠到自定义并设置属性。

对于导航栏,您可以在 Attributes Inspector 中类似地设置 Standard 和 Scroll Edge Appearances,但这已在堆栈溢出的其他地方提到。

在此处输入图像描述

于 2021-11-04T05:20:43.207 回答
0

首先,问题是由于取消选中半透明引起的,我通过从属性检查器滚动边缘选择导航栏外观来修复它,它会修复它,请看这个屏幕截图

于 2021-09-22T12:40:55.387 回答
0

我的问题通过以下方法解决,替换右侧导航栏所需的颜色

navigationController?.navigationBar.backgroundColor = .lightGray

于 2021-10-07T08:37:15.287 回答