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
la source
modalViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
résoudra le problème,Réponses:
iOS8 +
Dans iOS8 +, vous pouvez désormais utiliser le nouveau modalPresentationStyle UIModalPresentationOverCurrentContext pour présenter un contrôleur de vue avec un arrière-plan transparent:
la source
[self presentViewController:modalViewController animated:YES completion:nil];
? (au lieu de targetController)?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 je dois changer est que j'ai remplacé UIModalPresentationFullScreen par UIModalPresentationCurrentContext. Comme c'est simple!
FirstViewController.m
AVIS: Si vous utilisez une propriété modalPresentationStyle de navigationController:
FirstViewController.m
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
la source
self.modalPresentationStyle = UIModalPresentationCurrentContext;
l'a fait.self.modalPresentationStyle = UIModalPresentationFullScreen; [self performSegueWithIdentifier:@"CustomSegue" sender:self];
Donc, pour les penseurs purement visuels et les fans de storyboard, vous pouvez faire:
1. Présentation de View Controller
2. Contrôleur de vue présenté
la source
Solution Swift 3 et iOS10:
la source
Ceci provient de xCode 7 beta 4 en utilisant une séquence de glissement de contrôle. Définissez simplement l'arrière-plan de votre destination pour effacer et définissez les propriétés de segue dans IB comme suit (nb. La présentation peut également être "En plein écran"):
la source
J'ai trouvé le moyen le plus simple de le faire fonctionner sur iOS7 et iOS8 est d'ajouter set the presentationStyle à UIModalPresentationOverCurrentContext sur le modallyPresentedVC (ViewController que vous souhaitez présenter de manière modale) à cause d'iOS8:
et UIModalPresentationCurrentContext sur presentationVC (le contrôleur qui présente le modallyPresented) à cause d'iOS7:
Parce que les choses sont gérées différemment sur iOS7 et iOS8. Bien sûr, vous n'avez pas besoin de définir les propriétés navigationController si vous n'en utilisez pas. J'espère que cela pourra aider.
la source
Version Swift2:
la source
Une autre façon (pas besoin de créer une transition personnalisée et fonctionne sur iOS 7)
Utilisation de Storyboard:
Créez le contrôleur de vue enfant avec une taille de liberté, définissez la largeur de la vue sur 500x500 (par exemple) et ajoutez la méthode suivante:
Ensuite, créez une séquence modale avec feuille de formulaire et testez-la.
la source
Solution iOS 7 avec segue personnalisé:
Solution basée sur un code de haute technologie.
la source
Pour moi, cela fonctionne:
MMPushNotificationViewController
est le contrôleur de la vue transparente et j'ai également rendu laMMPushNotificationViewController
couleur de la vue de la couleur claire. Maintenant tout ce que j'ai fait et fait mon Transparentviewcontroller.la source
Pour iOS7
Il existe maintenant un moyen d'y parvenir en utilisant les transitions personnalisées iOS7, de cette façon:
Pour créer votre transition personnalisée, vous avez besoin de 2 choses:
<UIViewControllerTransitionDelegate>
)<UIViewControllerAnimatedTransitioning>
)Vous pouvez trouver plus d'informations sur les transitions personnalisées dans ce tutoriel .
la source
Fonctionne très bien sur iOS7 et iOS8
la source
Vous pouvez également «rajouter» la fenêtre à la vue.
Et de cette manière, la présentation peut être animée.
la source
Pour iOS 7 et uniquement en utilisant Interface Builder, cela peut être accompli en définissant la présentation sur «Over Current Context» sur tous les contrôleurs de vue impliqués dans la présentation modale. Même pour les contrôleurs de navigation.
Par exemple, définissez-le sur tous ces contrôleurs de vue:
NavController -> RootViewController -> ModalViewController
la source
Je n'ai pas beaucoup joué avec le constructeur de Storyboard / Interface, mais ce qui me ressort, c'est que vous dites que la vue est de couleur claire (c'est-à-dire 100% alpha / transparent) et que vous lui dites également qu'elle est opaque ( 0% alpha - complètement solide). Ces deux choses ne semblent pas concorder. Je commenterais la
self.view.opaque = YES;
ligne et voir si cela fonctionne alors;)Ah, autre chose à laquelle je viens de penser - il est tout à fait possible que votre contrôleur de vue ait l'arrière-plan alpha, mais bien sûr, l'alpha sera affiché jusqu'à la couleur de la fenêtre de base ou du contrôleur de vue racine du programme, ce qui est par noir par défaut. La couche de base de toute votre application ne peut pas avoir un arrière-plan transparent - transparent à quoi? Qu'y a-t-il derrière? Il doit y avoir quelque chose à voir A TRAVERS la transparence. Cela a-t-il du sens?
la source
Utilisez simplement "self.modalPresentationStyle = UIModalPresentationCurrentContext;", dans la vue de présentation
Fonctionnera très bien :)
la source