自定义 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上更改状态栏背景颜色和文本颜色? Warif Akhand Rishi
iOS 7 中 UIActivityViewControllers 的模态状态栏和导航栏文本颜色