模态呈现的viewcontroller的透明背景

时间:2014-12-27 17:30:23

标签: swift parse-platform ios8.1

我正在使用Parse& ParseUI。 我希望我的PFLoginViewController子类具有透明背景。将来,我想对背景模糊不清。

但....一旦完成PFLoginViewController的动画制作,背景就变黑了......在动画期间,背景是透明的。

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
        //
    }
}

我的logincontroller使用了子类:

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

    }

}

如何让它透明?

P.S。将clearColor应用于子类中的backgroundColor没有任何区别

4 个答案:

答案 0 :(得分:111)

修正了它。

问题是presentViewController没有保留我所覆盖的视图。

viewController.modalPresentationStyle = .overCurrentContext

做了这个伎俩。

答案 1 :(得分:29)

部分解决方案隐藏在问题中。你需要三条线来使背景透明,即。 isOpaque = false backgroundColor = .clear&设置modalPresentationStyle

这是完整的解决方案。在调用View Controller中,调用此函数:

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

ModalViewController的{​​{1}}:

viewDidLoad()

答案 2 :(得分:1)

我有两个视图控制器第一次登录和第二次忘记密码。最初,在点击“忘记密码”按钮时可以看到登录屏幕,“忘记密码”屏幕将显示在登录屏幕上,背景为透明。

在“登录”屏幕中,我已使用forforgotButtonAction的以下代码来呈现forgotPasswordViewController

   let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "forgotPasswordViewController") as! forgotPasswordViewController
    vc.modalPresentationStyle = .overCurrentContext
    present(vc, animated: true, completion: nil)

同样在forgotPasswordViewController中,在ViewDidLoad方法下,我必须通过以下代码更改视图背景颜色和不透明状态

   override func viewDidLoad() {
    super.viewDidLoad()
    view.isOpaque = false
    view.backgroundColor = .clear
   }

答案 3 :(得分:0)

万一有人在透明背景下挣扎,我前段时间找到了这种解决方案-我不记得在哪里,但仍然可以与最新的Xcode和Swift一起使用。

ContactListViewController2: UIViewController, UITableViewDelegate, UITableViewDataSource,UIViewControllerTransitioningDelegate {

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

    self.modalPresentationStyle = .custom
    self.transitioningDelegate = self
}