192 votes

iOS : ViewController modal avec arrière-plan transparent

J'essaie de présenter un contrôleur de vue de manière modale, avec un arrière-plan transparent. Mon objectif est de permettre à la vue du contrôleur de vue présentateur et du contrôleur de vue présenté d'être affichée en même temps. Le problème est que lorsque l'animation de présentation se termine, la vue du contrôleur de vue présenté disparaît.

- (IBAction)pushModalViewControllerButtonPressed:(id)sender
{
    ModalViewController *modalVC = [[ModalViewController alloc] init];
    [self presentViewController:modalVC animated:YES completion:nil];
}

Je sais que je pourrais simplement ajouter la vue en tant que sous-vue, mais j'aimerais éviter cette solution pour une raison quelconque. Comment pourrais-je la corriger ?

1voto

Swift 4.2

guard let someVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "someVC") as? someVC else {
    return
}
someVC.modalPresentationStyle = .overCurrentContext

present(someVC, animated: true, completion: nil)

0voto

Kenpachi Points 1578

Dans l'appdelegate :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[_window rootViewController]setModalPresentationStyle:UIModalPresentationCurrentContext];
    return YES;
}

dans votre premier contrôleur de vue d'où vous devez charger la vue suivante :

  NextViewController *customvc = [[NextViewController alloc]init];
    [self presentViewController:customvc animated:YES completion:^{

    }];

dans votre prochainViewController qui doit être ajouté en transparence :

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor clearColor];
    UIView* backView = [[UIView alloc] initWithFrame:self.view.frame];
    backView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
    [self.view insertSubview:backView atIndex:0];
}

0voto

tinkl Points 1

L'écran de connexion est un écran modal, ce qui signifie qu'il se place au-dessus de l'écran précédent. Jusqu'à présent, nous avons utilisé l'option Arrière-plan flou, mais il ne s'agit pas d'un flou, juste d'un arrière-plan gris.

Nous devons définir notre modale correctement.

lien image cible

  • Tout d'abord, nous devons changer le fond d'écran du contrôleur de vue en couleur claire. Cela signifie simplement qu'il doit être transparent. Par défaut, cette vue est blanche.

  • Ensuite, nous devons sélectionner le segment qui mène à l'écran de connexion et, dans l'inspecteur d'attributs, définir la présentation sur Over Current Context. Cette option n'est disponible que si la mise en page automatique et les classes de taille sont activées.

lien image cible

0voto

Définir la navigation modalPresentationStyle à UIModalPresentationCustom

et définissez la couleur de fond de votre contrôleur de vue présenté comme couleur claire.

-5voto

Apple_iOS0304 Points 492

Essayez ceci

[self.view setBackgroundColor:[UIColor clearColor]];

dans la vue a été chargé lorsque la nouvelle vue est présentée ou ajoutée. J'espère que cela vous aidera ! Santé !

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