2016-11-24 47 views
-1

我需要一个白色的状态栏为我的主要初始ViewController,但也能够隐藏在另一个ViewController。我可以做一个或另一个,但不能同时做。有什么建议么?iOS设置状态栏白色,并隐藏在另一个ViewController

我将它设置为白色由 的Info.plist

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
     return .LightContent 
} 

设置

基于控制器的视图状态栏的外观关键NO并隐藏它(在另一个ViewController模态地呈现)我呢,

override func prefersStatusBarHidden() -> Bool { 
    return statusBarHidden 
} 

但是它不会隐藏,除非我删除了我之前添加到Info.plist的密钥,但是如果我删除了密钥,那么状态栏会回到黑色。


编辑,我的解决方案: 视图控制器类没有在我的情况下工作,因为我有嵌入导航控制器的主视图控制器,我的修补程序是覆盖相同的方法,但对于导航控制器,而不是有问题的视图控制器。

extension UINavigationController { 
    public override func preferredStatusBarStyle() -> UIStatusBarStyle { 
     return .LightContent 
    } 
} 
+0

哪个版本的Xcode是你的工作吗?我的意思是swift3或更早版本? – Rajat

+0

swift 2.2,xcode 7.3 ...还需要留在xcode7.3中一段时间​​。 – sweepez

+0

不要为此使用Info.plist。使用提供的视图控制器方法。 – matt

回答

0

如果您在Info.plist中

添加

基于控制器的视图状态栏的外观关键NO您应该使用[UIApplication setStatusBarHidden:withAnimation:][UIApplication setStatusBarStyle:animated:]切换到状态栏的外观。由于这是在说你的方法不会被调用

苹果document

UIViewControllerBasedStatusBarAppearance(布尔 - iOS设备)指定状态栏的外观是否是基于由视图控制器,是目前首选的风格在状态栏下。如果此键不存在或其值设置为YES,则视图控制器将确定状态栏样式。当键设置为NO时,视图控制器(或应用程序)必须使用UIApplication对象明确地设置状态栏样式。

UIViewControllerBasedStatusBarAppearance密钥与View controller-based status bar appearance密钥相同。

如果你不添加密钥,你的方法应该可以工作。尝试在这两个ViewController中添加两个方法,并添加一些断点以查看它们被调用或错误覆盖。

中的代码雨燕3.0的Xcode 8.2为我工作:

override open var preferredStatusBarStyle: UIStatusBarStyle { 
    return .lightContent 
}  


override open var prefersStatusBarHidden: Bool { 
    return true 
} 
+0

谢谢,现在无法尝试,今晚可能会尝试(也是,我不是那种投下你的答案的人)。问题是,如果我从plist删除键状态栏保持黑色。此外即时运行在xcode 7.3和[UIApplication setStatusBarHidden:withAnimation:]已被弃用。 – sweepez

+0

谢谢,就像我说过的我不是那个投下你答案的人。此外,我发现我的问题,视图控制器类无法正常工作,因为我已将VC嵌入到NavigationController中。 – sweepez