147 votes

Afficher clearColor UIViewController sur UIViewController

J'ai un UIViewController vue comme une sous-vue/modal sur le dessus de l'autre UIViewController vue, comme celui de la sous-vue/modal doit être transparente et de tous les composants est ajouté à la sous-vue doit être visible. Le problème est que j'ai est la sous-vue montre fond noir au lieu d'avoir clearColor. Je suis en train de faire UIView comme un clearColor pas de fond noir. Quelqu'un sait quel est le problème avec elle? Toute suggestion apprécié.

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 corrigé les problèmes. Il fonctionne si bien pour les deux de l'iPhone et de l'iPad. Modal-Vue-Contrôleur sans fond noir juste clearColor/transparent. La seule chose que j'ai besoin de changement, j'ai remplacé UIModalPresentationFullScreen à UIModalPresentationCurrentContext. Comment simple que cela!

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 un modalPresentationStyle 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, c'est que la solution ci-dessus ne fonctionne pas sur iOS 7. La bonne nouvelle, c'est que j'ai résolu le problème pour iOS7! J'ai demandé à quelqu'un pour obtenir de l'aide et voici ce qu'il dit:

Lors de la présentation d'une vue contrôleur modal, iOS supprime l'affichage des contrôleurs en dessous de la vue de la hiérarchie pour la durée qu'il est présenté. Tandis que la vue de votre modal présenté-vue-contrôleur est transparent, il n'y a rien en dessous, à l'exception de la fenêtre d'application, qui est noir. iOS 7 a introduit une nouvelle modal style de présentation, UIModalPresentationCustom, qui provoque iOS de ne pas supprimer les points de vue sous la vue-contrôleur. Toutefois, pour utiliser cette modal style de présentation, vous devez fournir votre propre transition délégué pour gérer la présentation et de rejeter les animations. C'est décrit dans les " Transitions Personnalisées à l'Aide de la Vue des Contrôleurs de la conférence de la WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218 qui couvre également comment mettre en place votre propre transition délégué.

Vous pouvez voir ma solution pour le problème ci-dessus, dans iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions

142voto

Brody Robertson Points 3197

iOS8

Dans iOS8, vous pouvez maintenant utiliser la nouvelle modalPresentationStyle UIModalPresentationOverCurrentContext de présenter un vue contrôleur avec un fond transparent :

138voto

hightech Points 1209

RÉSOLU: j'ai corrigé les problèmes. Il fonctionne si bien pour les deux de l'iPhone et de l'iPad. Modal-Vue-Contrôleur sans fond noir juste clearColor/transparent. La seule chose que j'ai besoin de changement, j'ai remplacé UIModalPresentationFullScreen à UIModalPresentationCurrentContext. Comment simple que cela!

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 un modalPresentationStyle 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, c'est que la solution ci-dessus ne fonctionne pas sur iOS 7. La bonne nouvelle, c'est que j'ai résolu le problème pour iOS7! J'ai demandé à quelqu'un pour obtenir de l'aide et voici ce qu'il dit:

Lors de la présentation d'une vue contrôleur modal, iOS supprime l'affichage des contrôleurs en dessous de la vue de la hiérarchie pour la durée qu'il est présenté. Tandis que la vue de votre modal présenté-vue-contrôleur est transparent, il n'y a rien en dessous, à l'exception de la fenêtre d'application, qui est noir. iOS 7 a introduit une nouvelle modal style de présentation, UIModalPresentationCustom, qui provoque iOS de ne pas supprimer les points de vue sous la vue-contrôleur. Toutefois, pour utiliser cette modal style de présentation, vous devez fournir votre propre transition délégué pour gérer la présentation et de rejeter les animations. C'est décrit dans les " Transitions Personnalisées à l'Aide de la Vue des Contrôleurs de la conférence de la WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218 qui couvre également comment mettre en place votre propre transition délégué.

Vous pouvez voir ma solution pour le problème ci-dessus, dans iOS7: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions

4voto

educaPix Points 41

Une autre façon (pas besoin de créer la transition personnalisée et travaux sur iOS 7)

En utilisant la table de montage séquentiel :

Créez le contrôleur de vue d’enfant avec la taille de la liberté, valeur largeur 500 x 500 (par exemple) et ajoutez la méthode suivante :

Ensuite, créez un Modal segue avec feuille de formulaire et de le tester.

4voto

Max Gribov Points 1

solution d’iOS 7 avec custom segue :

Solution basée sur le code hightech.

2voto

Kirualex Points 3202

Pour iOS7

Il existe désormais un moyen de réaliser cela à l'aide de l'iOS7 transitions personnalisées, de cette façon :

MyController * controller = [MyController new];
[controller setTransitioningDelegate:self.transitionController];
controller.modalPresentationStyle = UIModalPresentationCustom;
[self controller animated:YES completion:nil];

Pour créer votre transition personnalisée, vous avez besoin de 2 choses :

  • Un TransitionDelegate objet de la mise en œuvre <UIViewControllerTransitionDelegate>)
  • Un "AnimatedTransitioning" objet (mise en place d' <UIViewControllerAnimatedTransitioning>)

Vous pouvez retrouver plus d'informations sur les transitions personnalisées dans ce tutoriel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X