是否可以将状态栏文本(前景)颜色更改为任意颜色(即不是黑色或白色)? [复制]
Posted
技术标签:
【中文标题】是否可以将状态栏文本(前景)颜色更改为任意颜色(即不是黑色或白色)? [复制]【英文标题】:Is it possible to change the status bar text (foreground) color to an arbitrary color (i.e. not black or white)? [duplicate] 【发布时间】:2014-06-16 12:04:59 【问题描述】:有谁知道如何更改状态栏文本颜色?
我希望 文本 为橙色。
我不是在谈论常规的黑色或白色
`UIStatusBarStyleLightContent`; or `UIStatusBarStyleBlackOpaque`; or whatever.
【问题讨论】:
拜托各位,你们不觉得我已经尝试在 Google 上找到解决方案了吗?但是,正如我所提到的,我正在寻找一种方法来更改 TEXT 颜色,而不是状态栏的背景颜色。 恕我直言,问题的标题应更改为“是否可以将状态栏 文本颜色更改为橙色?”因为那是 OP 想知道的。因此我认为它不是重复的。 虽然这个问题很旧,但 我已投票重新提出这个问题。 所谓重复中的答案回答了如何将状态栏颜色更改为黑色或白色的。 OP明确表示他对黑色或白色不感兴趣!下面的一个答案甚至明确(并且错误地)指出“您不能将其更改为橙色”。这不是真的。我已经发布了实际有效的代码,它可以将状态栏文本颜色更改为任何颜色,甚至是橙色。 OP甚至明确表示他不是在谈论黑人或白人,所以其他答案不是骗子! 【参考方案1】:没有记录方法可以将文本颜色更改为橙色。但是,这绝对是可能的,因为我刚刚尝试过,它确实有效。
免责声明:这都是无证领土......当您将其提交到应用商店时,它可能不会被批准。但是,你可能很幸运......
在 ios 7 中,您可以这样做:
/// sets the status bar text color. returns YES on success.
/// currently, this only
/// works in iOS 7. It uses undocumented, inofficial APIs.
BOOL setStatusBarColor(UIColor *color)
id statusBarWindow = [[UIApplication sharedApplication] valueForKey:@"statusBarWindow"];
id statusBar = [statusBarWindow valueForKey:@"statusBar"];
SEL setForegroundColor_sel = NSSelectorFromString(@"setForegroundColor:");
if([statusBar respondsToSelector:setForegroundColor_sel])
// iOS 7+
[statusBar performSelector:setForegroundColor_sel withObject:color];
return YES;
else
return NO;
在 iOS5 和 iOS6 中也有可能,但我没有尝试过,因为它的工作量更大。但是我发现了一种有趣的方法(在 iOS 5 和 iOS 6 中可用)。 UIStatusBarItemView
类有一个名为 -textColorForStyle:
的实例方法(它接受一个整数并返回一个对象)。您可以对其进行猴子修补以返回您喜欢的任何颜色。
【讨论】:
好吧,这就是我所说的很棒的答案!但是,我需要发布我的应用程序,交叉手指 :) 顺便说一句,我能问你你是如何发现 id statusBarWindow = [[UIApplication sharedApplication] valueForKey:@"statusBarWindow"]; id statusBar = [statusBarWindow valueForKey:@"statusBar"];会返回正确的对象吗? 1.:曾几何时,我在网上发现了一个名为“运行时浏览器”的应用程序。 (它不是this one,虽然它可能工作得很好,但我还没有尝试过。)我已经做好了 ARC 的准备,添加了向我展示方法签名的功能,阅读文档以了解运行时系统,所以现在我知道@12@0:4i8
的含义是“采用整数并返回对象的方法”、提高性能等。这个应用程序向我展示了系统中的所有类,以及所有方法名称以及每个方法的方法签名。
2.: 我广泛使用调试器,在包含临时变量的“调试方法”中设置断点,或者做一些实验性的事情,然后我逐步检查我的方法并检查对象,它们的类名等。当我发现某些东西时,我会在 iOS 5、6 和 7 中对其进行测试,以查看它在哪里工作以及在哪里中断。您确实需要足够的测试设备,并且您始终应该在设备上而不是在模拟器中工作。偶尔我也会在模拟器中测试一些东西,以确保它不会在那里崩溃。
3.: 如果其他方法都失败了,猴子补丁通常会有所帮助。但是当你将它用于除了做研究之外的任何事情时,你必须非常小心。而且它也更耗时,所以我只有在我真的需要知道一些事情时才会这样做。
Apple 是否拒绝使用此代码的应用程序?我想试一试……【参考方案2】:
您无法将其更改为橙色。
黑色和白色是目前唯一可用的状态栏内容/纹理颜色。
Apple UI 指南提到不要创建自定义状态栏。
状态栏内容/文本的默认颜色是黑色,如果状态栏后面的内容是深色的,这可能会导致状态栏变得不可读。
为了解决这个问题,您可以设置应用程序和/或视图的UIStatusBarStyle
。 UIStatusBarStyleLightContent
将状态栏内容的颜色改为白色;或者,UIStatusBarStyleDefault
将状态栏内容的颜色设置为黑色。
【讨论】:
我会将你的答案标记为答案,因为这个问题现在一团糟。不过谢谢!没错,黑色和白色是 atm 唯一可用的颜色。 @user1147981:看看我的新答案……橙色也是可能的以上是关于是否可以将状态栏文本(前景)颜色更改为任意颜色(即不是黑色或白色)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章