web-dev-qa-db-fra.com

Présenter un contrôleur de vue avec un fond sombre

J'ai un contrôleur de vue dont le fond de vue doit être translucide et continuer à montrer la vue ci-dessous. J'ai ajusté l'opacité dans le fichier nib et j'ai essayé à la fois d'insérer le contrôleur de vue dans une pile de navigation et de le présenter de manière modale, mais une fois chargé, l'affichage précédent est déchargé. Comment pourrais-je résoudre ceci?

10
AppsDev

Est-ce ce que vous cherchez?

Voir le contrôleur A -> Voir le contrôleur B (nib)

Swift <3:

Dans View Controller A, ajoutez la ligne de code suivante:

let viewControllerB = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
viewControllerB.modalPresentationStyle = .OverFullScreen

presentViewController(viewControllerB, animated: true, completion: nil)

Et dans View Controller B, définissez la couleur d'arrière-plan de view avec la méthode colorWithAlphaComponent:

view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.7)        

Swift ≥ 3:

Voir le contrôleur A:

let viewControllerB = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
viewControllerB.modalPresentationStyle = .overFullScreen

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

Voir le contrôleur B:

view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
18
Anh Pham

Swift 3.0 Code  

let addIncidentViewController = self.storyboard?.instantiateViewController(withIdentifier: "addIncidentViewController") as! AddIncidentViewController
addIncidentViewController.modalPresentationStyle = .overCurrentContext
self.present(addIncidentViewController, animated: true) {

    }

Et définir la couleur de fond avec un alpha.

3
krish

Vous pouvez utiliser UIView au lieu d'un contrôleur de vue ..__, puis ajustez l'alpha de la couleur d'arrière-plan de la vue.

2
tuledev

AppsDev,

Est-ce ce que vous cherchez mon pote ??? Ici Testing1234 est une étiquette ajoutée à parentViewController Me ici est une étiquette ajoutée à childViewController qui est présentée sous forme modale :)

enter image description here

Si votre réponse est oui, voici comment vous pouvez le faire :) En supposant que vous utilisiez le storyboard, j'écrirai la réponse :) Si vous utilisez Xib, ne vous inquiétez pas, toutes ces propriétés peuvent également être définies par programme :)

Le point principal ici est de faire le modal presentationoverfull screen :)

Voici comment vous pouvez le faire :)

Faites glisser une séquence entre vos deux ViewControllers :) Faites la transition pour présenter modulairement le viewController et sélectionnez les configurations suivantes:) enter image description here

Maintenant, sélectionnez votre ViewController parent qui présentera le secondViewController et changera la couleur de fond en blanc (ou la couleur de votre choix)

enter image description here

Sélectionnez ensuite votre secondViewController qui doit être présenté :) Sélectionnez son affichage et définissez son alpha sur 0,5 et sa couleur sur une couleur claire, comme illustré ci-dessous.

enter image description here

Ajoutez maintenant une autre vue à viewController, définissez sa couleur sur le noir et alpha sur 0,5 ou 0,6 en fonction de vos besoins en teintes :)

enter image description here

Maintenant, ajoutez ce que les composants de vue que vous voulez ajouter par dessus soient exécutés et vous obtiendrez la sortie comme indiqué ci-dessus :)

J'espère que ça aide :)

2
Sandeep Bhandari

Swift3

Sous viewWillAppear, vous pouvez utiliser:

self.view.alpha = 0.8 

Et sous viewWillDisappear, vous pouvez utiliser:

self.view.alpha = 1.0
1
Geniouse

Imaginez que vous voulez utiliser votre contrôleur de vue à plusieurs endroits (supposons que vous créez un framework). Vous devez définir modalPresentationStyle sur .overCurrentContext, mais vous ne souhaitez pas le définir chaque fois que vous créez une nouvelle instance de contrôleur de vue. 

Vous voulez le définir à l'intérieur de init surchargé du contrôleur de vue qui sera présenté

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    modalPresentationStyle = .overCurrentContext
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

puis dans viewDidLoad() de ce contrôleur, placez la couleur de fond au noir plus clair:

override public func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = UIColor.black.withAlphaComponent(0.6)
}

Enfin, lorsque vous devez présenter votre contrôleur de vue, il suffit de l’initialiser et de le présenter.

let viewController = SecondViewController(nibName: "SecondViewController", bundle: nil)
present(viewController, animated: true)
0
Robert Dresler

Il existe deux façons de présenter ViewController avec une vue d'opacité.

Sur le contrôleur de vue actuel

// presenting view controller
definesPresentationContext = true

// presented view controller
modalPresentationStyle = .overCurrentContext

Si le contrôleur de vue dispose d'une navigation ou d'une barre de tabulation en plein écran.

// presented view controller
modalPresentationStyle = .overFullScreen
modalTransitionStyle = .crossDissolve
0
Jone

(Swift 3) Une meilleure solution consiste à charger la vue à partir de xib puis à l’ajouter au contrôleur de la manière suivante: 

   let supportView =  Bundle.main.loadNibNamed("YourXIB", owner: nil, options: nil)?[0] as! YourView

    let viewController = UIViewController()
    viewController.view = supportView
    viewController.modalPresentationStyle = .overCurrentContext

    present(viewController, animated: true, completion: nil)e

Et puis ajoutez de la transparence:

    viewController.view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.7)    
0
Fares Ben Hamouda