我的应用程序背景是黑色的,但在iOS 7中,状态栏变成了透明的。所以我什么也看不见,只有角落里的绿色电池指示灯。如何将状态栏文本颜色改为白色,就像在主屏幕上一样?


当前回答

实现这一功能的关键是只有全屏视图控制器才能指定状态栏的样式。

如果你正在使用一个导航控制器,并且想要在每个视图控制器的基础上控制状态栏,你会想要子类化UINavigationController并实现preferredStatusBarStyle,这样它就会返回topViewController的首选项。

确保你将故事板场景中的类引用从muinavigationcontroller更改为你的子类(例如下面例子中的MyNavigationController)。

(以下方法对我有用。如果你的应用程序是基于TabBar,你会想做类似的事情通过子类化UITabBarController,但我还没有尝试出来)。

@interface MyNavigationController : UINavigationController

@end

@implementation MyNavigationController

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return self.topViewController.preferredStatusBarStyle;
}

@end

其他回答

总结一下,编辑你的项目信息。Plist并添加:

基于视图控制器的状态栏外观:NO

状态栏样式:不透明的黑色样式

或者如果你有raw key/value plist

uiviewcontrollerbasedstatusbar外观:NO

UIStatusBarStyle:不透明黑色风格

对我来说,使用其他答案(以及其他来源/文档)中的所有东西都没有发生任何事情。真正有帮助的是在XIB中将导航栏样式设置为“黑色”。这在没有任何代码的情况下将文本更改为白色。

extension UIApplication {

    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }
}

只需改变1)信息。plist基于控制器的状态栏外观->否 和写 2)

  [[UIApplication
 sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent]; 

in

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

在信息。plist设置“视图基于控制器的状态栏外观”为NO

在AppDelegate中添加

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];