Xcode如何隐藏iOS 10中的白色状态栏

9
我想在我的应用程序中有一个白色的状态栏。为此,我将“视图控制器基础状态栏外观”设置为“NO”,并将“状态栏样式”设置为“UIStatusBarStyleLightContent”。但现在我需要在一些视图控制器中隐藏状态栏。要隐藏它,我必须将“视图控制器基础状态栏外观”设置为“YES”,并添加“-(BOOL)prefersStatusBarHidden {return YES;}”。但是现在状态栏是黑色的。当“视图控制器基础状态栏外观”为“YES”时,它是黑色的,如果是“NO”,则是白色的。所以问题是,如何设置白色状态栏并隐藏它?
更新: 我想在VC中有白色的状态栏(prefferdSTatusBarStyle没有被调用的代码)。

enter image description here

使用VC编写具有隐藏状态栏的代码

enter image description here

.plist设置

enter image description here

结果是黑色状态栏,在某些VC中隐藏。
更新2:
我知道使用过时的方法是不好的,但是使用[[UIApplication sharedApplication] setStatusBarHidden:YES];一切都按照我的意愿工作。如果有更好的解决方案,请告诉我。

你需要在项目的每个视图控制器中显示“UIStatusBarStyleLightContent”吗? - Birendra
是的。所有视图控制器都应该有白色状态栏。 - Ossir
你找到解决方案了吗? - OXXY
可能是如何在iOS中隐藏状态栏?的重复问题。 - Jake Chasan
5个回答

5
这是Swift版本:
要隐藏状态栏或更改其外观,您需要在视图控制器本身中覆盖以下属性。
override var prefersStatusBarHidden: Bool{
        return true
}

上面的代码可以隐藏状态栏,如果你想将其设置为白色,使用以下代码:
override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
}

2
在您的属性列表(plist)文件中添加View controller-based status bar appearance布尔属性,并将其设置为YES。
现在在您的视图控制器中添加以下方法:
// TO MAKE STATUS BAR WHITE
override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .LightContent
}

// TO MAKE STATUS BAR BLACK
override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .LightContent
}

// RETURN TRUE TO HIDE AND FALSE TO SHOW STATUS BAR
override func prefersStatusBarHidden() -> Bool {
        return true
}

针对Objective-C的翻译:

- (BOOL)prefersStatusBarHidden {
    return NO;
}

-(UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

为了删除冗余代码,您可以将BaseViewController作为UIViewController的子类,并在该类中添加方法。并覆盖需要更改的方法所在的类中的方法。

不知道出了什么问题,但是当我这样做时,状态栏变成黑色,而preferredStatusBarStyle没有被调用。prefersStatusBarHidden可以正常工作。 - Ossir
@Ossir 确保该方法没有被其他地方覆盖重写? - Parth Adroja
是的。我在我的项目中搜索了一下,只有一个结果。 - Ossir
@Ossir 你使用导航控制器吗? - Parth Adroja
我将UITabBarController作为根视图控制器。 - Ossir
显示剩余4条评论

0

你可以使用Xcode设置状态栏样式为“Light”

enter image description here


你需要更改 info.plist 文件来调整状态栏吗? - Birendra
仅当 View controller-based status bar appearance 设置为 YESStatus bar style 设置为 UIStatusBarStyleLightContent 时,状态栏才会呈现浅色。但是现在状态栏是黑色的。 - Ossir
你需要将“View controller-based status bar appearance”设置为“NO”。 - Birendra
如果我将其设置为“NO”,则无法使用prefersStatusBarHidden隐藏状态栏。 - Ossir
你试过这段代码吗?-(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } - Birendra
让我们在聊天中继续这个讨论 - Birendra

0
如果您的ViewController嵌入在UINavigationController中,则尝试在其中编写以下代码:
-(BOOL)prefreStatusBarHidden
{
       return [self.navigationController prefersStatusBarHidden];
}

-1
您可以通过在基础视图控制器中设置导航背景图像来实现此操作。
UIImage *bgImage = [UIImage imageNamed:@"bg_navigationbar"];
[self.navigationController.navigationBar setBackgroundImage:bgImage forBarMetrics:UIBarMetricsDefault];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接