模态视图控制器的透明背景

我正在使用 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
//
}
}

我的登录控制器使用的子类:

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


}


}

我怎样才能使它透明?

将 clearColor 应用到子类中的 backoundColor 没有区别

58923 次浏览

修好了。

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

viewController.modalPresentationStyle = .overCurrentContext

成功了。

与选择的答案相同,但是通过 IB 可视化:

enter image description here

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

下面是完整的解决方案。在调用 View Controller 时,调用这个函数:

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

ModalViewController台的 viewDidLoad()台:

override func viewDidLoad() {
super.viewDidLoad()


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

如果有人还在为一个透明的背景而挣扎,我在不久前发现了这个解决方案-我不记得在哪里,但仍然可以很好地使用最新的 Xcode & Swift。

ContactListViewController2: UIViewController, UITableViewDelegate, UITableViewDataSource,UIViewControllerTransitioningDelegate {


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


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

我有两个视图控制器第一登录和第二忘记密码。最初,登录屏幕上已经可见的点击忘记密码按钮,忘记密码屏幕将出现在登录屏幕上方,具有透明的背景。

在 Login 屏幕中,我使用了下面的 forgetButtonAction 代码来显示 forgetPasswordViewController

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

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

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