Quiero mostrar, por encima de cualquier otra vista, incluso la barra de navegación, una especie de vista "emergente" que se ve así:
- Fondo negro de pantalla completa con un 0.5 alfa para ver el otro
UIViewController
debajo. - una
UIView
ventana en el medio con algo de información (un calendario si quieres saberlo todo).
Para hacer eso, he creado un UIViewController que contiene los dos UIViews
(fondo y ventana), y estoy tratando de mostrarlo. He intentado una simple [mySuperVC addSubview:myPopUpVC.view]
, pero todavía tengo la barra de navegación de arriba.
Intenté presentarlo como modal, pero la parte UIViewController
inferior desaparece y pierdo el efecto de transparencia.
Cualquier idea para hacer esto, estoy seguro de que es bastante simple ...
¡Gracias!
ios
uiviewcontroller
uinavigationbar
popupwindow
Nicolas Roy
fuente
fuente
Respuestas:
Puede hacerlo agregando su vista directamente a keyWindow:
ACTUALIZACIÓN - Para Swift 4.1 y superior
fuente
[self.navigationController.view addSubview:overlayView];
es lo que realmente quieresfuente
Aquí hay una solución simple y elegante que está funcionando para mí. Puede establecer la posición z de la barra de navegación debajo de la vista:
Solo recuerde volver a establecerlo en 0 cuando haya terminado.
fuente
Versiones rápidas para la respuesta comprobada:
Swift 4:
Swift 3.1:
fuente
Agregue su vista como la subvista de NavigationController.
También puede agregarlo sobre la ventana:
Espero que esto ayude.. :)
fuente
let navigationBar = viewController.navigationController!.navigationBar navigationBar.addSubview(coverView)
Gran solución de Dalef en Swift:
fuente
La respuesta de @ Nam funciona muy bien si solo desea mostrar su vista personalizada, pero si su vista personalizada necesita interacción del usuario, debe deshabilitar la interacción para el
navigationBar
.Como dijo en la respuesta de Nam, no olvide revertir estos cambios:
Puede hacer esto de una mejor manera con una extensión:
Y simplemente utilízalo así:
fuente
Versión rápida de la respuesta de @Nicolas Bonnet:
No olvide que la ventana debe ser una propiedad fuerte, porque la respuesta original conduce a una desasignación inmediata de la ventana.
fuente
Te recomiendo que crees una nueva UIWindow:
Luego puede administrar su vista en otro UIViewController. Para eliminar las ventanas:
Espero que ayude!
fuente
Hay más de una forma de hacerlo:
1- Agregue su
UIView
enUIWindow
lugar de agregarloUIViewController
. De esta manera estará por encima de todo.2- Use una transición personalizada que mantendrá su UIViewController mostrando en la parte posterior con un 0.5 alfa
Para eso te recomiendo que mires esto: https://github.com/Citrrus/BlurryModalSegue
fuente
fuente
En Swift 4.2 y Xcode 10
En objetivo C
UIView * spinnerView; // Esta es tu vista
Esto solo puede funcionar en modo vertical u horizontal.
Un código simple más es:
fuente
Tenga en cuenta que si desea agregar la vista en pantalla completa, use solo el código a continuación
Agregue estas extensiones de UIViewController
Continuar como proceso normal de adición de subvista
Ahora úselo para agregar UIViewController viewDidAppear
fuente
Usaría una subclase de UIViewController que contiene una "Vista de contenedor" que integra sus otros controladores de vista. Luego podrá agregar el controlador de navegación dentro de la Vista de contenedor (utilizando la relación de inserción segue, por ejemplo).
Consulte Implementación de un controlador de vista de contenedor
fuente
Este método funciona con xcode 9.4, iOS 11.4
fuente
fuente
Debe agregar una subvista a la primera ventana con el tipo UITextEffectsWindow. Al primero, porque los teclados personalizados agregan su UITextEffectsWindow, y si agrega una subvista, esto no funcionará correctamente. Además, no puede agregar una subvista a la última ventana porque el teclado, por ejemplo, también es una ventana y no puede presentar desde la ventana del teclado. Entonces, la mejor solución que encontré es agregar una subvista (o incluso un controlador de vista push) a la primera ventana con el tipo UITextEffectsWindow, esta ventana cubre la vista de accesorios, la barra de navegación, todo.
fuente