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

Posted

技术标签:

【中文标题】升级到 XCode 13(和 iOS 15)后选项卡和导航栏发生变化【英文标题】:Tab & Navigation Bar changes after upgrading to XCode 13 (& iOS 15) 【发布时间】:2021-11-15 18:04:06 【问题描述】:

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

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

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

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

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

升级前的故事板示例:

之后:

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

如果您的应用支持,这将导致 iOS12 及以下版本崩溃。【参考方案2】:

对我来说,我在使用 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

【讨论】:

简单而宏伟的解决方案...【参考方案3】:

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

【讨论】:

【参考方案4】:

我的问题解决了,把右边的导航栏换成你想要的颜色

navigationController?.navigationBar.backgroundColor = .lightGray

【讨论】:

【参考方案5】:

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

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

【讨论】:

感谢@Eduardo Santi,上面的解决方案有效,在我的情况下,将 isTranslucent 设置为 true 也有效,至于标签栏,我已经指定了背景颜色【参考方案6】:

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

【讨论】:

有趣的是,在我这端,实际上检查半透明解决了一半的问题 我知道有多乱:D

以上是关于升级到 XCode 13(和 iOS 15)后选项卡和导航栏发生变化的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Xcode 4.2 和 iOS5 后,应用程序无法在 iPhone 上运行

自 xCode 13 和 iOS 15 以来,Appium(和桌面)无法启动 wda 会话

IOS15 升级后 Iframe 内容未加载到 Iphone 中

IOS15真机调试慢问题解决

IOS15真机调试慢问题解决

IOS15真机调试慢问题解决