Прозрачный фон для модально представленного viewcontroller
Я использую 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
}
}
Как я могу сделать это прозрачным?
Ps Применение clearColor к backgroundColor в подклассе не имеет значения
3 ответа
Починил это.
Проблема заключалась в том, что presentViewController не сохраняет представление, которое я освещал.
loginViewController.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext
сделал трюк.
Часть решения скрыта в вопросе. Вам нужно три линии, чтобы сделать фон прозрачным, а именно. isOpaque = false
backgroundColor = .clear
& установить modalPresentationStyle
Вот полное решение. В вызывающем View Controller вызовите эту функцию:
func presentModal() {
let modalController = ModalViewController()
modalViewController.modalPresentationStyle = .OverCurrentContext
presentViewController(modalViewController, animated: true, completion: nil)
}
И в ModalViewController
"s viewDidLoad()
:
override func viewDidLoad() {
super.viewDidLoad()
view.isOpaque = false
view.backgroundColor = .clear // try other colors, say: .white or black with Alpha etc.
}
У меня два контроллера просмотра: 1-й логин и 2-й забытый пароль. Первоначально экран входа в систему был виден при нажатии кнопки забытого пароля, экран забытого пароля будет отображаться поверх экрана входа с прозрачным фоном.
На экране входа в систему я использовал следующий код для ForgotButtonAction, чтобы представить ForgotPasswordViewController.
let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "forgotPasswordViewController") as! forgotPasswordViewController
vc.modalPresentationStyle = .overCurrentContext
present(vc, animated: true, completion: nil)
А также в забудьте PasswordViewController, в методе ViewDidLoad мне нужно изменить цвет фона представления и непрозрачное состояние с помощью следующего кода
override func viewDidLoad() {
super.viewDidLoad()
view.isOpaque = false
view.backgroundColor = .clear
}
В случае, если кто-то все еще борется с прозрачным фоном, я нашел это решение некоторое время назад - я не могу вспомнить, где, но все еще отлично работает с последними Xcode & Swift.
ContactListViewController2: UIViewController, UITableViewDelegate, UITableViewDataSource,UIViewControllerTransitioningDelegate {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.modalPresentationStyle = .custom
self.transitioningDelegate = self
}