wake-up-neo.net

Darstellung eines View-Controllers mit schwachem Hintergrund

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?

10
AppsDev

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)
18
Anh Pham

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.

3
krish

Sie können anstelle eines Ansichtscontrollers UIView verwenden. _ Passen Sie dann das Alpha der Hintergrundfarbe der Ansicht an.

2
tuledev

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 :)

 enter image description here

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 presentationoverfull 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:)  enter image description here

Wählen Sie nun Ihren übergeordneten ViewController aus, der den secondViewController präsentiert und die Hintergrundfarbe in Weiß (oder die gewünschte Farbe) ändert.

 enter image description here

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)

 enter image description here

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 :)

 enter image description here

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 :)

2

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
1
Geniouse

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)
0
Robert Dresler

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
0
Jone

(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)    
0