Tengo una UIViewController
vista como una subvista / modal encima de otra UIViewController
vista, como que la subvista / modal debe ser transparente y cualquier componente que se agregue a la subvista debe ser visible. El problema es que lo que tengo es que la subvista muestra un fondo negro en lugar de tener clearColor. Estoy tratando de hacer UIView
que el fondo sea un color claro y no negro. ¿Alguien sabe qué tiene de malo? Cualquier sugerencia apreciada.
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:vc animated:NO];
SecondViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.opaque = YES;
self.view.backgroundColor = [UIColor clearColor];
}
RESUELTO : Solucioné los problemas. Funciona muy bien tanto para iPhone como para iPad. Controlador de vista modal sin fondo negro solo claro Color / transparente. Lo único que necesito es el cambio que sustituye UIModalPresentationFullScreen
a UIModalPresentationCurrentContext
. ¡Qué simple es eso!
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];
AVISO: si está utilizando una modalPresentationStyle
propiedad de navigationController
:
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];
AVISO: La mala noticia es que la solución anterior no funciona en iOS 7. ¡La buena noticia es que solucioné el problema para iOS7! Le pedí ayuda a alguien y esto es lo que dijo:
Al presentar un controlador de vista modalmente, iOS elimina los controladores de vista debajo de la jerarquía de vista durante el tiempo que se presenta. Si bien la vista de su controlador de vista presentado modalmente es transparente, no hay nada debajo, excepto la ventana de la aplicación, que es negra. iOS 7 introdujo un nuevo estilo de presentación modal UIModalPresentationCustom
, que hace que iOS no elimine las vistas debajo del controlador de vista presentado. Sin embargo, para usar este estilo de presentación modal, debe proporcionar su propio delegado de transición para manejar la presentación y descartar las animaciones. Esto se describe en la charla 'Transiciones personalizadas utilizando controladores de vista' de WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218 que también cubre cómo implementar su propio delegado de transición.
Puede ver mi solución para el problema anterior en iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
modalViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
va a resolver el problema,