作者:宋宝松示_989 | 来源:互联网 | 2022-10-21 12:16
重现问题的前提条件:
Xcode 11 Beta + iOS 13(最新版本至2019年6月12日)
导航栏处于大文本模式
指定导航栏的颜色。
在实际设备中,状态栏将在绿色导航栏上方保留为白色。
我尝试的解决方案:
将其还原回iOS12即可解决,但最终我们将遇到iOS13 ...
禁用大文本模式将解决此问题...
隐藏状态栏将解决此问题,但会导致状态文本与导航栏项重叠。
有任何想法吗?感谢您的帮助。
1> Mike..:
No hacks or funkiness required here. The key is defining the desired appearance and setting this value on BOTH the nav bar's standardAppearance
AND its scrollEdgeAppearance
. I have the following in the init for my base navigation controller subclass for my entire app:
if #available(iOS 13.0, *) {
let navBarAppearance = UINavigationBarAppearance()
navBarAppearance.configureWithOpaqueBackground()
navBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]
navBarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
navBarAppearance.backgroundColor =
navigationBar.standardAppearance = navBarAppearance
navigationBar.scrollEdgeAppearance = navBarAppearance
}
该方法存在一个问题,即当应用程序在后台运行时,用户何时更改其主题(例如light-> dark)。其他内容会更改其颜色,但仅保留导航栏的颜色。您可以轻松地看到这一点。只需在模拟器中运行应用程序,然后从“设置”应用程序中的“开发人员”设置更改外观即可。尝试覆盖`traitCollectionDidChange`仍然出现错误。有什么想法吗?
@CenoX,我找到了解决您问题的简便方法。首先,在资产目录中创建新的颜色集。将外观从“无”更改为“任何,光,暗”。选择您想要的任何颜色。第二步是在代码中加载您的自定义UIColor。使用“ let customColor = UIColor(named” CustomColor“),将名称” CustomColor“更改为资产名称。最后一步是将颜色分配给我们的条形背景。
2> Hans Knöchel..:
在iOS 13上,根据Apple人机界面指南,使用大标题的导航栏具有透明的颜色。在这里查看更多信息:
在iOS 13及更高版本中,默认情况下,大型标题导航栏不包含背景材料或阴影。另外,随着人们开始滚动内容,大型标题会转换为标准标题
3> matt..:
如果问题是您希望在显示大标题时为导航栏提供颜色,请使用新的UINavigationBarAppearance类。
let app = UINavigationBarAppearance()
app.backgroundColor = .blue
self.navigationController?.navigationBar.scrollEdgeAppearance = app