j'ai un UIViewController
vue sous-vue / modale sur une autreUIViewController
vue, telle que la sous-vue / modale doit être transparente et tous les composants ajoutés à la sous-vue doivent être visibles. Le problème est que la sous-vue montre un fond noir à la place pour avoir clearColor. J'essaie de faire UIView
un fond clair et non noir. Quelqu'un sait-il ce qui ne va pas? Toute suggestion appréciée.
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];
}
RÉSOLU : j'ai résolu les problèmes. Cela fonctionne si bien pour iPhone et iPad. Modal View Controller sans fond noir juste clearColor / transparent. La seule chose que j'ai besoin de changer est que j'ai remplacéUIModalPresentationFullScreen
parUIModalPresentationCurrentContext
. Comme c'est simple!
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];
AVIS: si vous utilisez unmodalPresentationStyle
propriété 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];
AVIS: La mauvaise nouvelle est que la solution ci-dessus ne fonctionne pas sur iOS 7. La bonne nouvelle est que j'ai résolu le problème pour iOS7! J'ai demandé de l'aide à quelqu'un et voici ce qu'il a dit:
Lors de la présentation modale d'un contrôleur de vue, iOS supprime les contrôleurs de vue situés en dessous de la hiérarchie de vues pendant la durée de sa présentation. Alors que la vue de votre contrôleur de vue présenté modalement est transparente, il n'y a rien en dessous sauf la fenêtre de l'application, qui est noire. iOS 7 a introduit un nouveau style de présentation modal UIModalPresentationCustom
, qui empêche iOS de supprimer les vues sous le contrôleur de vue présenté. Cependant, pour utiliser ce style de présentation modale, vous devez fournir votre propre délégué de transition pour gérer la présentation et ignorer les animations. Ceci est décrit dans la présentation «Transitions personnalisées à l'aide de contrôleurs de vue» de WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218 qui explique également comment implémenter votre propre délégué de transition.
Vous pouvez voir ma solution pour le problème ci-dessus dans iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
modalViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
résoudra le problème,