webentwicklung-frage-antwort-db.com.de

Transparenter Hintergrund für modal präsentierten Viewcontroller

Ich benutze Parse & ParseUI. Ich möchte, dass meine PFLoginViewController-Unterklasse einen transparenten Hintergrund hat. In Zukunft möchte ich einen unscharfen Blick über den Hintergrund werfen.

Aber ... Sobald das Animate-In des PFLoginViewControllers abgeschlossen ist, wird der Hintergrund schwarz ... Während der Animation war der Hintergrund transparent.

func presentLogin() {
    var loginViewController = LoginViewController()
    var signupViewController = SignUpViewController()

    loginViewController.fields = .UsernameAndPassword | .LogInButton | .PasswordForgotten | .SignUpButton | PFLogInFields.DismissButton
    signupViewController.fields = .UsernameAndPassword | .Email | .DismissButton | .SignUpButton
    loginViewController.delegate = self
    loginViewController.logInView.backgroundColor = UIColor.clearColor()
    loginViewController.logInView.opaque = false
    signupViewController.delegate = self

    loginViewController.signUpController = signupViewController

    self.presentViewController(loginViewController, animated: true) { () -> Void in
        //
    }
}

Die verwendete Unterklasse meines Logincontrollers:

class LoginViewController: PFLogInViewController {

    @IBOutlet weak var _nmcLogoLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        let userName = SettingsManager.userName
        let password = SettingsManager.password

        self.logInView.usernameField.text = userName
        self.logInView.passwordField.text = password

        NSBundle.mainBundle().loadNibNamed("LoginViewBranding", owner: self, options: nil)[0] as? UIView

        self.logInView.logo = _nmcLogoLabel

    }

}

Wie kann ich es transparent machen?

Ps. Das Anwenden der clearColor auf die backgroundColor in der Unterklasse macht keinen Unterschied

51
P5ycH0

Behoben.

Das Problem war, dass presentViewController die von mir abgedeckte Ansicht nicht beibehält.

viewController.modalPresentationStyle = .overCurrentContext

hat den Trick gemacht.

126
P5ycH0

Ein Teil der Lösung ist in der Frage verborgen. Sie benötigen drei Zeilen, um den Hintergrund transparent zu machen, nämlich. isOpaque = falsebackgroundColor = .clear & Setze den modalPresentationStyle

Hier ist die vollständige Lösung. Rufen Sie im aufrufenden View Controller die folgende Funktion auf:

func presentModal() {
    let modalController = ModalViewController()
    modalViewController.modalPresentationStyle = .overCurrentContext
    present(modalViewController, animated: true, completion: nil)
}

Und in ModalViewController 's viewDidLoad():

override func viewDidLoad() {
    super.viewDidLoad()

    view.isOpaque = false
    view.backgroundColor = .clear // try other colors, say: .white or black with Alpha etc.
}
36
Nitin Nain

wie die ausgewählte Antwort, aber visuell über IB:

enter image description here

22
Jesus Rodriguez

Für den Fall, dass noch jemand mit einem transparenten Hintergrund zu kämpfen hat, habe ich diese Lösung vor einiger Zeit gefunden - ich kann mich nicht erinnern, wo, aber mit dem neuesten Xcode & Swift funktioniert sie noch gut.

ContactListViewController2: UIViewController, UITableViewDelegate, UITableViewDataSource,UIViewControllerTransitioningDelegate {

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    self.modalPresentationStyle = .custom
    self.transitioningDelegate = self
}
0
Jeremy Andrews