Cómo cambiar el color de la barra de estado de iOS en el controller de vista secundaria

(iOS 7 Xcode 5.0.2)

Utilicé los siguientes methods, cambié con éxito el color de la barra de estado a blanco en el controller de la vista raíz

[self setNeedsStatusBarAppearanceUpdate]; // Update status bar style -(UIStatusBarStyle)prefernetworkingStatusBarStyle { return UIStatusBarStyleLightContent; // Set status bar color to white } 

Ahora estoy tratando de cambiar el color de la barra de estado a negro cuando navego al controller de vista secundaria, no sé cómo hacerlo. (El color de la barra de estado sigue siendo blanco)

Busqué y encontré este método: childViewControllerForStatusBarStyle Leí el documento de Apple, pero aún no sé cómo hacerlo / dónde usarlo, y no estoy seguro de si este es el enfoque correcto

¿Alguien sabe cómo cambiar el color de la barra de estado en el controller de vista secundaria?

De forma pnetworkingeterminada, parece que UINavigationController desafortunadamente no proporciona una implementación pnetworkingeterminada sensible de childViewControllerForStatusBarStyle . Al implementar este método, puede decirle a su control de navigation que posponga todas las llamadas a prefernetworkingStatusBarStyle a su childViewController superior.

Puede subclass UINavigationController e implementar el método allí, o simplemente agregar una categoría:

 @implementation UINavigationController (ChildStatusBarStyle) - (UIViewController *)childViewControllerForStatusBarStyle { return self.topViewController; } @end 

Simplemente descubro: cuando incrusta correctamente el controller de vista raíz dentro de UINavigationController, nunca necesitarás crear una categoría para expandir la capacidad del controller de navigation o subclasificar UINavigationController para el mismo propósito.

Solo necesita colocar prefernetworkingStatusBarStyle dentro de cada controller de vista, y recuerde llamar a [self setNeedsStatusBarAppearanceUpdate]; para actualizar el estilo de la barra de estado. ¡Simple como es!

vea este video de WWDC 2013: haga clic aquí


EDITAR:

La razón por la que lo hice funcionar, es que ocupo establecer UINavigationBar oculto. En este caso, se comporta igual cuando no se usa UINavigationController. Cuando intenta cambiar StatusBarStyle de un UIViewController que está dentro de la stack UINavigationController. No funcionará de esta manera. Solo funciona en UIViewController individual. El ejemplo del video WWDC 2013 no utiliza UINavigationController, por lo que el enfoque funciona bien.

En contraste con lo que dijo James Frost, y después de mucho time dedicado a depurar por qué mis actividades del browser tenían colors incorrectos de StatusBar (Swift):

 override func childViewControllerForStatusBarStyle() -> UIViewController? { return visibleViewController } 

Dicho esto: en algunos escenarios, .topViewController tiene razón, en otros, como con UIActivities, es .visibleViewController.