Saltar al contenido

iOS: ViewController modal con fondo transparente

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];

Ver imagen adjunta

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *