我需要让 UINavigationController
中嵌入的特定ViewController具有光状态栏文本颜色(但其他 ViewController
s表现不同) . 我知道至少有3种方法,但无论如何都不适用于我的情况 .
-
在plist中将
UIViewControllerBasedStatusBarAppearance
设置为YES
-
在viewDidLoad中执行
[self setNeedsStatusBarAppearanceUpdate];
-
添加以下方法:
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
在iOS 7.0.3上运行,此方法对我不起作用,因为即使在我正确实现了所有3个步骤之后,也永远不会调用 preferredStatusBarStyle
.
将 navigationBar
的 barStyle
设置为 UIBarStyleBlackTranslucent
将提供白色状态栏文本(即 UIStatusBarStyleLightContent
), UIBarStyleDefault
将提供黑色状态栏文本(即 UIStatusBarStyleDefault
) .
这种方法在iPhone上公平公正,但不适用于iPad .
- 在plist中将
UIViewControllerBasedStatusBarAppearance
设置为NO
,然后使用
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
这显然不适用于这种情况,因为我只需要为两个 ViewController
指定不同的状态栏颜色 .
谢谢大家的帮助!
7 回答
对于有
UINavigationController
这个问题的人我可以建议创建一个自定义UINavigationController
并在其上实现preferredStatusBarStyle
,如下所示:这样,状态栏样式将是顶视图控制器的样式 . 现在你可以随心所欲地实现视图控制器的
preferredStatusBarStyle
.这是对Groot answer的改进,以UINavigationController的简单类别的形式,而不需要子类UINavigationController .
Swift
Swift 3 & Swift 4
Objective-C
要为
UINavigationController
堆栈上的每个UIViewController
单独设置UIStatusBarStyle
,您必须首先继承UINavigationController
并覆盖childViewControllerForStatusBarStyle
方法 .在你的UINavigationController子类中添加:
你可以使用
preferredStatusBarStyle
方法将UIStatusBarStyle
设置为每个UIViewController
中你想要的任何东西 . 例如:我使用了你提到的第一种方法,我也发现当你使用
UINavigationController
时会有一些错误,它永远不会将preferredStatusBarStyle
调用传递给它的子视图控制器 . 我所做的是将UINavigationController
子类化,并覆盖preferredStatusBarStyle
方法,如下所示:然后每当我需要导航控制器时,我使用
GLBaseNavigationController
而不是UINavigationController
. 对于故事板,您还需要为子类指定导航控制器的类 .对于您的第一个解决方案,我认为您无法更改viewDidLoad中的状态栏 . 如果您有两个ViewControllers堆叠在一起,并且每个ViewController以不同方式切换状态栏,则该方法仅为每个方法调用一次 . 您真的想要更改
viewWillAppear
中的状态栏,以便每次显示页面时都会调用它 . 我也不认为你可以依赖preferredStatusBarStyle
,因为我也不确定它被调用的频率/时间 . 这就是你想要的方式:目前你只能做光明和黑暗 . 改为光明做 .
在
.plist
文件中将UIViewControllerBasedStatusBarAppearance
设置为YES
.在
viewDidLoad
方法中[self setNeedsStatusBarAppearanceUpdate];
添加此方法:
-(UIStatusBarStyle)preferredStatusBarStyle{ return UIStatusBarStyleLightContent; }
要将其更改回黑暗,请将
UIStatusBarStyleLightContent
更改为UIStatusBarStyleDefault
在AppDelegate的didFinishLaunch方法中,设置默认的状态栏样式,例如:
然后,在您要更改状态栏的那两个视图控制器中,覆盖以下方法: