web-dev-qa-db-fra.com

Swift Contrôleur de vue modale avec arrière-plan transparent

Je sais que ce sujet est très populaire, mais je suis un petit problème avec un langage de programmation, le fait est que je ne comprends toujours pas où je mets le code. Eh bien, je vais raconter toute l'affaire:

enter image description here

J'essaie de créer un Swift modal légèrement différent de la normale: en cliquant sur un bouton, ViewController s'affiche (type modal suivant) à l'écran, mais avec un arrière-plan transparent. Seule la vue bleue avec étiquette sera affichée. Lorsque ce ViewController est présenté, il a un fond transparent, mais dès qu’il a terminé la transition, il reste sur le fond noir. Déjà désactivé l'option opaque, et testé certaines options, mais rien de ce dépannage.

Certains peuvent m'aider?

La vidéo est un test dans le simulateur sur le cas ( https://www.youtube.com/watch?v=wT8Uwmq9yqY ).

Je commence par Swift, et je ne sais toujours pas comment programmer dans Xcode. J'ai lu une réponse à une question comportant le code suivant pour résoudre ceci:

self.presentingViewController.providesPresentationContextTransitionStyle = YES;
self.presentingViewController.definesPresentationContext = YES;
modal.modalPresentationStyle = UIModalPresentationOverCurrentContext;

Où dois-je mettre ce code?

95
user5046034

Vous pouvez le faire comme ça:

Dans votre contrôleur de vue principale:

func showModal() {
    let modalViewController = ModalViewController()
    modalViewController.modalPresentationStyle = .overCurrentContext
    presentViewController(modalViewController, animated: true, completion: nil)
}

Dans votre contrôleur de vue modale:

class ModalViewController: UIViewController {
    override func viewDidLoad() {
        view.backgroundColor = UIColor.clearColor()
        view.opaque = false
    }
}

Si vous travaillez avec un storyboard:

Ajoutez simplement un scénario de storyboard avec Kind défini sur Present Modally à votre contrôleur de vue modale et définissez les valeurs suivantes sur ce contrôleur de vue:

  • Fond = couleur claire
  • Dessin = Décochez la case Opaque
  • Présentation = contexte actuel

Comme Crashalot l'a souligné dans son commentaire: Assurez-vous que la séquence utilise uniquement Default pour les deux Presentation et Transition. Utiliser Current Context pour Presentation rend le modal noir, au lieu de rester transparent.

254
joern