gpt4 book ai didi

iOS:带有 UIViewControllerBasedStatusBarAppearance 的默认状态栏样式 YES

转载 作者:技术小花猫 更新时间:2023-10-29 11:22:17 25 4
gpt4 key购买 nike

有没有办法在保持 UIViewControllerBasedStatusBarAppearance 启用的同时设置默认状态栏样式?

这是我正在处理的问题:

几乎整个应用程序都需要使用 UIStatusBarStyle.LightContent,因为导航栏的背景是深色的。最初,UIViewControllerBasedStatusBarAppearance 被禁用,在 Info.plist 中为 while text status 状态栏设置了以下内容:

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>

直到我发现这个 .LightContent 状态栏甚至对于某些共享扩展(如 Facebook Messenger)也会显示,导致它不可读:

Facebook Messenger Share Extension light status bar style

这可以通过使用 UIViewControllerBasedStatusBarAppearance 来解决,但是我需要将以下方法添加到所有 View Controller 中,因为应用程序非常大,所以我想避免这样做。

此外,对于应用程序中具有浅色导航栏背景的一个屏幕,我使用 UIApplication.sharedApplication().setStatusBarStyle() 切换到深色导航栏,但此方法在 iOS 中已弃用9.

有什么解决办法吗?调酒?

最佳答案

解决方案

实现这一点的最简单和最简洁的方法是在 AppDelegateapplication:willFinishLaunchingWithOptions 方法中添加以下行:

UINavigationBar.appearance().barStyle = .Black

这将使 .LightContent 作为整个应用程序的默认状态栏样式,只要您的应用程序使用 UINavigationController

如果要在启动屏幕期间使用 .LightContent 状态栏样式,请不要忘记在应用程序的 Info.plist 中保留以下设置:

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>

长话短说

我当前的设置与许多其他应用非常相似,使用 UITabBarController 作为最顶层的 Controller ,每个选项卡都有 UINavigationController 堆栈。

UINavigationController 负责状态栏样式(它应该如此)并且不在其 subview Controller 上调用 preferredStatusBarStyle()。因此,实现 subclassing solution proposed by par在我的情况下不起作用。

进一步继承UINavigationController的自定义子类I'm using也不是一个干净的解决方案。

现在,由于该应用程序启用了 UIViewControllerBasedStatusBarAppearance 并且在应用程序本身的任何地方都更正了状态栏样式,因此 SFSafariViewController 和消息、邮件等共享扩展使用正确的 ( .Default) 状态栏样式。

唯一没有使用正确状态栏样式的异常(exception)是问题中提到的 Facebook Messenger 的共享扩展。然而,这似乎是扩展本身的一个错误,因为我尝试过的所有使用 .LightContent 状态栏样式的应用程序(例如 Twitter)都有相同的问题 - 提供的 FB Messenger 共享扩展来自该应用程序有一个带有白色文本的状态栏。

关于iOS:带有 UIViewControllerBasedStatusBarAppearance 的默认状态栏样式 YES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41895965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com