自定义 iOS 7 状态栏文本颜色

Posted

技术标签:

【中文标题】自定义 iOS 7 状态栏文本颜色【英文标题】:Customize iOS 7 status bar text Color 【发布时间】:2014-07-31 08:10:20 【问题描述】:

我想知道除了黑色白色颜色之外,还有没有办法改变ios 7状态栏文字颜色?

【问题讨论】:

***.com/questions/21465486/… How to change Status Bar text color in iOS 7.的可能重复 @iDev:不,我之前已经阅读过链接。但是,像大多数问题一样,它只将文本颜色设置为黑色或白色。我想要的是使文本颜色为绿色。有可能吗? 【参考方案1】:

把它放在你的 AppDelegate 应用程序中:didFinishLaunchingWithOptions:

Swift 4.2:

if UIApplication.shared.responds(to: Selector(("statusBar"))),
    let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView,
    statusBar.responds(to: #selector(getter: CATextLayer.foregroundColor)) 
    statusBar.setValue(UIColor.red, forKey: "foregroundColor")

Swift 3.0:

万一 Apple 决定更改类的命名(极不可能),我们将添加一些类型安全性。

if application.responds(to: Selector(("statusBar"))),
   let statusBar = application.value(forKey: "statusBar") as? UIView,
   statusBar.responds(to: Selector(("foregroundColor"))) 
   statusBar.setValue(UIColor.red, forKey: "foregroundColor")

Swift 2.0:

application.valueForKey("_statusBar")?.setValue(UIColor.redColor(), forKey: "_foregroundColor")

目标-C:

[[application valueForKey:@"_statusBar"] setValue: [UIColor redColor] forKey: @"_foregroundColor"];

很难说您的应用是否会被应用商店拒绝。使用 KVC 访问 _statusBar 属性不会让您的应用程序被拒绝,因为 UIApplication 类本身并未隐藏。

话虽如此,UIStatusBar 类也没有隐藏,即。它不在 SDK 的 PrivateFrameworks 目录中,也不用__attribute__((visibility("hidden"))) 标记,类名也不以下划线开头。

如果您的应用因使用此功能而被拒绝,请在下方发表评论,以便我更新答案。

【讨论】:

如果使用呼叫或位置或麦克风等服务,这可能会中断。最好在 UIApplicationDidChangeStatusBarFrame 的通知处理程序中添加相同的代码。 @LeoNatan 在_foregroundColor 属性上使用KVO 并将颜色改回红色不是更好吗? Ofc 防止颜色相同以避免递归。 该密钥可能不符合 KVO。事实上,大部分 UIKit 都不是。 你确定吗?据我了解,所有 Foundation Objective-C 类都自动符合 KVO。我知道你需要 dynamic 关键字才能快速。 Obj-C 有类似的东西吗? UIKit 不是 Foundation。 ObjC 总是使用动态调度,而在 Swift 中你需要显式声明它。如果您的类继承了NSObject 的形式,那么由于@objc 合规性,它的公共和内部方法和属性也使用动态调度。【参考方案2】:

理论上这是可能的。您将需要阅读有关 iOS 上的私有 api 的信息。这是从 UIStatusBar 示例开始的好地方:http://b2cloud.com.au/tutorial/using-private-ios-apis/ 请记住,如果您使用私有 api,您可能无法在 Appstore 上提交您的应用。

【讨论】:

以上是关于自定义 iOS 7 状态栏文本颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 7 上更改状态栏背景颜色和文本颜色?

如何在iOS 7上更改状态栏背景颜色和文本颜色? Warif Akhand Rishi

iOS 7 中 UIActivityViewControllers 的模态状态栏和导航栏文本颜色

状态栏文本颜色iOS 7 [重复]

ios 实现自定义状态栏StatusBar 和 导航栏navigationBar 的状态和颜色

iOS自定义状态栏背景颜色不显示