swift - modally - Fondo transparente para el controlador de vista presentado modalmente
swift present modal view controller programmatically (4)
Estoy usando Parse y ParseUI. Quiero que mi subclase PFLoginViewController tenga un fondo transparente. En el futuro, quiero establecer una vista borrosa sobre el fondo.
Pero ... Una vez que se realiza la animación del PFLoginViewController, el fondo se vuelve negro ... Mientras que durante la animación, el fondo era transparente.
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
//
}
}
La subclase utilizada de mi 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
}
}
¿Cómo puedo hacerlo transparente?
Ps La aplicación de clearColor al backgroundColor en la subclase no hace ninguna diferencia
Arreglado.
El problema era que presentViewController no mantiene la vista que estaba cubriendo.
viewController.modalPresentationStyle = .overCurrentContext
Hizo el truco.
En caso de que alguien todavía esté luchando con un fondo transparente, encontré esta solución hace algún tiempo: no recuerdo dónde, pero aún funciona bien con el último Xcode & Swift.
ContactListViewController2: UIViewController, UITableViewDelegate, UITableViewDataSource,UIViewControllerTransitioningDelegate {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.modalPresentationStyle = .custom
self.transitioningDelegate = self
}
Parte de la solución está oculta en la pregunta.
Necesita tres líneas para hacer que el fondo sea transparente, a saber.
isOpaque = false
backgroundColor = .clear
& set the
modalPresentationStyle
Aquí está la solución completa. En el controlador de vista de llamada, llame a esta función:
func presentModal() {
let modalController = ModalViewController()
modalViewController.modalPresentationStyle = .overCurrentContext
present(modalViewController, animated: true, completion: nil)
}
Y en
ModalViewController
viewDidLoad()
:
override func viewDidLoad() {
super.viewDidLoad()
view.isOpaque = false
view.backgroundColor = .clear // try other colors, say: .white or black with Alpha etc.
}