ios - big - ionic p
¿Cómo se usa modalPresentationCapturesStatusBarAppearance=NO con un UIPresentationController personalizado? (1)
Tengo un UIPresentationController personalizado y anula frameOfPresentedViewInContainerView para una presentación personalizada de viewController. Todo funciona bien, a excepción de la barra de estado.
No quiero que la barra de estado cambie la apariencia en absoluto, solo debe permanecer como se veía antes. Ahora, la documentación de Apple: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/instp/UIViewController/modalPresentationCapturesStatusBarAppearance indica si modalPresentationStyle no es UIModalPresentationFullScreen O modalPresentationCapturesStatusBarAppearance es NO, debería estar bien y la barra de estado no debería cambiar.
Con este código:
- (BOOL)prefersStatusBarHidden {
NSLog(
@"prefersStatusBarHidden was called %d %ld",
self.modalPresentationCapturesStatusBarAppearance,
(long)self.modalPresentationStyle
);
return YES;
}
Veo que se llama aStatusBarHidden, incluso si modalPresentationCapturesStatusBarAppearance es NO (se muestra como 0) y modalPresentationStyle es UIModalPresentationCustom (se visualiza como 4).
Obviamente, esa es la razón por la cual la barra de estado cambia cuando se presenta viewController.
¿Pero por qué?
Mi idea al respecto es que iOS piensa que viewController se presenta en pantalla completa, aunque no lo es.
Descubrí la propiedad UIPresentationController shouldPresentInFullscreen - devuelve SÍ de forma predeterminada. Devolver NO no ayuda en absoluto, por lo que no entiendo qué es lo que hace esa propiedad ... Literalmente no tiene ningún efecto. Lo mismo se aplica a la propiedad presentationStyle: no veo ningún efecto al modificarla. Hubiera esperado que la propiedad presentationStyle fuera "redirigida" a la propiedad viewControllers modalPresentationStyle, pero eso permanece en UIModalPresentationCustom, que tiene que ser para iniciar la presentación personalizada en primer lugar.
Entonces, mis preguntas son: ¿Alguien sabe cómo mantener la barra de estado como está con un UIPresentationController personalizado y alguien puede explicar las propiedades de shouldPresentInFullscreen y presentationStyle?
¡Gracias! :)
Intenta implementar childViewControllerForStatusBarStyle: y devuelve nil para ello en la clase que invoca a tu UIPresentationController, generalmente un UINavigationController.
Esto es lo que hago en Swift cuando no quiero que un VC infantil interfiera con mi estilo de barra de estado sabiamente elegido:
override func childViewControllerForStatusBarStyle() -> UIViewController? {
return nil // ignore childs and let this Navigation Controller handle the StatusBar style
}
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent // or .Default depending on your Style
}
Esto requiere iOS8 y más reciente, y solo se puede usar si está configurando la clave UIViewControllerBasedStatusBarAppearance
en su Info.plist
en YES
.
Bonificación: si esto no ayuda a la persona que llama, úselo en el controlador C que se muestra. Revisé mis proyectos, en uno de ellos también está en NavigationController, se muestra como PopOver y funciona bien a partir de hoy.