升级到 XCode 13 (& iOS 15) 后选项卡和导航栏发生变化

Tab & Navigation Bar changes after upgrading to XCode 13 (& iOS 15)

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

N:B: 我已经从 iOS 13 及以上强制使用浅色主题:

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

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

是否有简单的修复方法来重新调整情节提要,或者在这种情况下我必须手动更改每个视图?

升级前的 Storyboard 示例:

及之后:

(分别)升级前后的模拟器屏幕:

首先问题是取消选中半透明引起的 我通过从属性检查器滚动边缘选择导航栏外观来修复它 它会修复它 see this screen shot please

关于Navigation Bar是黑色的,试试看:

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

更新到 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
 }

我的问题已通过以下方式解决,请将导航栏右侧的颜色替换为您想要的颜色

navigationController?.navigationBar.backgroundColor = .lightGray

对我来说,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
}

您可以通过选择标签栏在故事板中执行此操作,并在属性检查器中选择标准外观和滚动边缘外观,将它们的设置设置为 iOS13 以及您需要的自定义字体或颜色将 Standard Layout Appearances Stacked 更改为 Custom 并设置属性。

对于导航栏,您可以在属性检查器中类似地设置标准和滚动边缘外观,但这已在堆栈溢出的其他地方提到。

in XCode13.0 and iOS 15.0 标签栏和导航栏透明问题以编程方式解决 100%

对于标签栏

if #available(iOS 15, *) {
        let appearance = UITabBarAppearance()
        appearance.configureWithOpaqueBackground()
        UITabBar.appearance().standardAppearance = appearance
        UITabBar.appearance().scrollEdgeAppearance = appearance
 }

对于导航栏

 if #available(iOS 15, *) {
        let appearance = UINavigationBarAppearance()
        appearance.configureWithOpaqueBackground()
        UINavigationBar.appearance().standardAppearance = appearance
        UINavigationBar.appearance().scrollEdgeAppearance = appearance
 }