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?
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)
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.
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.
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 :)
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 presentation
overfull 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:)
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)
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.
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 :)
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 :)
Swift3
Sous viewWillAppear
, vous pouvez utiliser:
self.view.alpha = 0.8
Et sous viewWillDisappear
, vous pouvez utiliser:
self.view.alpha = 1.0
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)
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
(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)