Solución:
Para aquellos que intentan que esto funcione en iOS 8, la forma “aprobada por Apple” de mostrar un controlador de vista modal transparente es configurando modalPresentationStyle
en el presenteed controlador para UIModalPresentationOverCurrentContext
.
Esto se puede hacer en código o configurando las propiedades del segue en el guión gráfico.
De la documentación de UIViewController:
UIModalPresentationOverCurrentContext
Un estilo de presentación en el que el contenido se muestra solo sobre el contenido del controlador de vista principal. Las vistas debajo del contenido presentado no se eliminan de la jerarquía de vistas cuando finaliza la presentación. Entonces, si el controlador de vista presentado no llena la pantalla con contenido opaco, el contenido subyacente se muestra.
Al presentar un controlador de vista en una ventana emergente, este estilo de presentación solo se admite si el estilo de transición es UIModalTransitionStyleCoverVertical. Intentar utilizar un estilo de transición diferente desencadena una excepción. Sin embargo, puede usar otros estilos de transición (excepto la transición de rizo parcial) si el controlador de vista principal no está en una ventana emergente.
Disponible en iOS 8.0 y posterior.
https://developer.apple.com/documentation/uikit/uiviewcontroller
El video ‘Ver los avances del controlador en iOS 8’ de la WWDC 2014 entra en esto con cierto detalle.
Nota:
- Asegúrese de darle al controlador de vista presentado un color de fondo claro, ¡para que no sea realmente transparente!
- Tienes que configurar esto antes de presentando, es decir, estableciendo este parámetro en el
viewDidLoad
del PresentViewController no tendrá ningún efecto
En iOS 8.0 y superior, se puede hacer configurando la propiedad modalPresentationStyle para UIModalPresentationOverCurrentContext
//Set property **definesPresentationContext** YES to avoid presenting over presenting-viewController's navigation bar
self.definesPresentationContext = YES; //self is presenting view controller
presentedController.view.backgroundColor = [YOUR_COLOR with alpha OR clearColor]
presentedController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
[self presentViewController:presentedController animated:YES completion:nil];
Este siguiente código solo funciona en el iPad.
self.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentModalViewController:modalVC animated:YES];
Me gustaría agregar una vista secundaria.
He aquí una muy buena discusión. Mire los comentarios específicamente. No solo la respuesta.
Vista modal
Si yo fuera tú, no lo haría. Agregaría una vista secundaria y lo haría. Parece que me da un mejor control sobre las cosas.
EDITAR:
Como mencionó Paul Linsay, desde iOS 8, todo lo que se necesita es UIModalPresentationOverFullScreen
para el modalPresentationStyle del ViewController que se presenta. Esto también cubriría los botones navigationBar y tabBar.