Ich habe einen Ansichts-Controller, dessen Hintergrund ich durchsichtig sein muss und die Ansicht weiter unten zeigt. Ich habe die Deckkraft in der nib
-Datei angepasst und versucht, den View-Controller in einen Navigations-Stack zu schieben und modal darzustellen, aber beim Laden wird die vorherige Ansicht entladen. Wie könnte ich das lösen?
Ist es das, wonach du suchst?
View Controller A -> View Controller B (Feder)
Swift <3:
Fügen Sie in View Controller A die folgende Codezeile hinzu:
let viewControllerB = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
viewControllerB.modalPresentationStyle = .OverFullScreen
presentViewController(viewControllerB, animated: true, completion: nil)
Legen Sie in View Controller B die Hintergrundfarbe von view
mit der colorWithAlphaComponent
-Methode fest:
view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.7)
Swift ≥ 3:
Controller A anzeigen:
let viewControllerB = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
viewControllerB.modalPresentationStyle = .overFullScreen
present(viewControllerB, animated: true, completion: nil)
Controller B anzeigen:
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) {
}
Und die Hintergrundfarbe mit etwas Alpha einstellen.
Sie können anstelle eines Ansichtscontrollers UIView
verwenden. _ Passen Sie dann das Alpha der Hintergrundfarbe der Ansicht an.
AppsDev,
Ist es das, was du suchst? Hier ist Testing1234 ein zu parentViewController hinzugefügtes Label Me hier ist ein zu childViewController hinzugefügtes Label, das modal dargestellt wird :)
Wenn Ihre Antwort ja ist, hier ist, wie Sie es tun können :) Angenommen, Sie sind Storyboard. Ich schreibe die Antwort :) Wenn Sie Xib verwenden, machen Sie sich keine Sorgen, dass alle diese Eigenschaften auch programmgesteuert festgelegt werden können.
Der Hauptpunkt ist hier der modal presentation
overfull screen
:)
So kannst du es machen :)
Ziehen Sie einen Segue zwischen Ihren beiden ViewControllern :) Machen Sie den Segue, um den ViewController modal darzustellen und wählen Sie die folgenden Konfigurationen:)
Wählen Sie nun Ihren übergeordneten ViewController aus, der den secondViewController präsentiert und die Hintergrundfarbe in Weiß (oder die gewünschte Farbe) ändert.
Wählen Sie nun Ihren secondViewController aus, der präsentiert werden muss :) Wählen Sie seine Ansicht aus und setzen Sie das Alpha auf 0,5 und die Farbe auf Farbe (siehe unten)
Fügen Sie dem viewController jetzt eine weitere Ansicht hinzu. Setzen Sie die Farbe auf Schwarz und Alpha auf 0,5 oder 0,6, je nachdem, was Sie für einen Schatten benötigen :)
Fügen Sie nun die Ansichtskomponenten hinzu, die Sie hinzufügen möchten, und sehen Sie die Ausgabe wie oben gezeigt :)
Ich hoffe es hilft :)
Swift3
Unter viewWillAppear
können Sie Folgendes verwenden:
self.view.alpha = 0.8
Und unter viewWillDisappear
können Sie Folgendes verwenden:
self.view.alpha = 1.0
Stellen Sie sich vor, Sie möchten Ihren View Controller an mehreren Stellen verwenden (beispielsweise, wenn Sie ein Framework erstellen). Sie müssen modalPresentationStyle
auf .overCurrentContext
setzen, aber nicht jedes Mal, wenn Sie eine neue Instanz des View-Controllers erstellen.
Sie möchten es in die überschriebene init
des View Controllers setzen, die angezeigt wird
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")
}
dann in viewDidLoad()
dieses Controllers nur Hintergrundfarbe zu helleren Schwarztönen:
override public func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.black.withAlphaComponent(0.6)
}
Wenn Sie Ihren View Controller präsentieren möchten, müssen Sie ihn schließlich initialisieren und präsentieren
let viewController = SecondViewController(nibName: "SecondViewController", bundle: nil)
present(viewController, animated: true)
Es gibt zwei Möglichkeiten, ViewController mit der Deckkraftansicht zu präsentieren.
Über aktuellem Viewcontroller
// presenting view controller
definesPresentationContext = true
// presented view controller
modalPresentationStyle = .overCurrentContext
Wenn der View Controller über eine Navigation oder eine Tab-Leiste im Vollbildmodus verfügt.
// presented view controller
modalPresentationStyle = .overFullScreen
modalTransitionStyle = .crossDissolve
(Swift 3) Eine bessere Lösung ist, die Ansicht von xib zu laden und sie dann wie folgt zum Controller hinzuzufügen:
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
Und dann etwas Transparenz hinzufügen:
viewController.view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.7)