在我用Xcode5为iOS 7构建的iPhone应用程序中,我在info.plist
中设置了UIViewControllerBasedStatusBarAppearance=YES
,并且在我的ViewController
中有这样的代码:
-(UIStatusBarStyle) preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
但状态栏在黑色背景下仍然是黑色的。
我知道可以通过在info.plist
中设置UIViewControllerBasedStatusBarAppearance=NO
来更改应用程序范围内的设置,但实际上我需要在运行时逐个viewController
地更改它。
发布于 2013-10-20 04:03:18
好了,这就是诀窍。您必须添加"View controller-based status bar“键,并将其值设置为No。
这与该键的含义相反,但即使您将该值设置为No
,您仍然可以更改状态栏的外观,以及它是否显示在任何视图控制器中。所以它的行为类似于“是”,但设置为“否”!
现在,我可以将状态栏设置为白色或黑色。
发布于 2015-06-11 11:39:24
我可能来得有点晚,但以防其他人正在寻找一个有效的和经过验证的应用程序范围的解决方案。
@mxcl在描述为什么会发生这种情况时是正确的。为了纠正它,我们只需创建一个扩展(或obj-c中的类别)来覆盖UINavigationController的preferredSatusBarStyle()方法。以下是Swift中的一个示例:
extension UINavigationController {
public override func preferredStatusBarStyle() -> UIStatusBarStyle {
if let rootViewController = self.viewControllers.first {
return rootViewController.preferredStatusBarStyle()
}
return super.preferredStatusBarStyle()
}
}
这段代码只是提取第一个视图控制器(根视图控制器)并将其解包(在obj-c中,只需检查它是否为nil)。如果解包成功(不是nil),那么我们将获取rootViewControllers preferredStatusBarStyle。否则,我们只返回默认值。
希望这对任何可能需要它的人有所帮助。
发布于 2013-10-01 13:29:16
在viewDidLoad中,只需编写以下代码
[self setNeedsStatusBarAppearanceUpdate];
只要这样做,它就会起作用。
你能试一下这个吗?
Set UIViewControllerBasedStatusBarAppearance to NO.
Call [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
我在你的问题中看到的另一件事是,你写的方法是这样的
-(void)UIStatusBarStyle PreferredStatusBarStyle ()
{
return UIStatusBarStyle.LightContent;
}
但是它应该是这样的
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
https://stackoverflow.com/questions/19108513
复制相似问题