升级到 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 后,我注意到 Tab 和 Navigation 栏有一些特殊的变化。在 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 会话