The iOS 7 Transition Guide give a good hint how to change the UIStatusBarStyle
dynamically in a UIViewController
using
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
together with [self setNeedsStatusBarAppearanceUpdate];
This works fine in a single view application. However, I'm now trying to change the UIStatusBarStyle
in a modal view to UIStatusBarStyleLightContent
. There is a MainViewController
which segues to the ModalViewController
, which itself is embedded in a NavigationController
. The ModalViewController
has set its delegate to the MainViewController
.
I tried to call [self setNeedsStatusBarAppearanceUpdate];
in the ModalViewController
together with the following method in that class without effect:
// In ModalViewController.m
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
I also tried to call [self setNeedsStatusBarAppearanceUpdate];
in MainViewController
on prepareForSegue: sender:
method with conditions in - (UIStatusBarStyle)preferredStatusBarStyle {}
to return UIStatusBarStyleLightContent
when the modal view is presented - but that has no effects, too.
How can I change the UIStatusBarStyle in the modal view?
EDIT: Post updated: I need to mention that the ModalViewController
is embedded in a NavigationController
with a NavigationBar
. With NavigationBar
set to hidden to above call of [self setNeedsStatusBarAppearanceUpdate];
in ModalViewController
works fine. But not when the Bar is visible.
You need a ViewController that's showing in Fullscreen to return the appropriate status bar infos. In your case: The NavigationController which contains ModalViewController needs to implement preferredStatusBarStyle
and return UIStatusBarStyleLightContent
.
A call to setNeedsStatusBarAppearanceUpdate
is only necessary if the values a view controller returns actually change. When the view controller is first presented they are queried anyway.