Eu tenho uma UIViewController
visão como uma subview / modal sobre outra UIViewController
view, como que a subview / modal deve ser transparente e quaisquer componentes adicionados à subview devem estar visíveis. O problema é que eu tenho é a subview mostra fundo preto em vez de ter clearColor. Estou tentando fazer UIView
como um plano de fundo claro e não preto. Alguém sabe o que há de errado com isso? Qualquer sugestão 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];
}
RESOLVIDO : Corrigi os problemas. Está funcionando tão bem para iPhone e iPad. Controlador de vista modal sem fundo preto apenas clearColor / transparente. A única coisa que eu preciso para a mudança é Troquei UIModalPresentationFullScreen
a UIModalPresentationCurrentContext
. Quão simples é isso!
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: Se você estiver usando uma modalPresentationStyle
propriedade 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: A má notícia é que a solução acima não funciona no iOS 7. A boa notícia é que eu corrigi o problema no iOS7! Pedi ajuda a alguém e aqui está o que ele disse:
Ao apresentar um controlador de exibição modalmente, o iOS remove os controladores de exibição abaixo da hierarquia de visualizações pela duração em que é apresentado. Embora a visualização do seu controlador de exibição apresentado de forma modal seja transparente, não há nada abaixo dele, exceto a janela do aplicativo, que é preta. O iOS 7 introduziu um novo estilo de apresentação modal UIModalPresentationCustom
, que faz com que o iOS não remova as visualizações abaixo do controlador de visualização apresentado. No entanto, para usar esse estilo de apresentação modal, você deve fornecer seu próprio delegado de transição para lidar com a apresentação e dispensar animações. Isso está descrito na palestra 'Transições personalizadas usando controladores de exibição' da WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218, que também aborda como implementar seu próprio delegado de transição.
Você pode ver minha solução para o problema acima no iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
modalViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
vai resolver o problema,