【问题标题】:Transparent background for modally presented viewcontroller模态呈现的视图控制器的透明背景
【发布时间】:2015-02-24 12:11:13
【问题描述】:

我正在使用 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 应用于子类中的 backgroundColor 没有区别

【问题讨论】:

    标签: swift parse-platform ios8.1


    【解决方案1】:

    修复它。

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

    viewController.modalPresentationStyle = .overCurrentContext
    

    成功了。

    【讨论】:

    • 你能不能也评论一下“pushViewController”的代码。
    • 工作解决方案!!
    • 这是秘密!
    • 但这不会将呈现的控制器添加到响应者链中
    • 如果使用modalPresentationStyle = .overCurrentContext,在关闭视图控制器后,不会调用父视图控制器的viewWillAppear。有什么办法可以解决这个问题?
    【解决方案2】:

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

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

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

    ModalViewControllerviewDidLoad()

    override func viewDidLoad() {
        super.viewDidLoad()
    
        view.isOpaque = false
        view.backgroundColor = .clear // try other colors, say: .white or black with Alpha etc.
    }
    

    【讨论】:

    • 当我在 Init 中设置代码时,这对我有用,而不是在 viewDidLoad 方法中
    • @NitinNain,我设置 view.alpha = 0.35 但所有视图控制器的控件也设置了 alpha 并且看起来模糊
    【解决方案3】:

    与所选答案相同,但通过 IB 可视化:

    【讨论】:

    • 您还需要将显示的控制器设置为 Nitin Nain 答案
    【解决方案4】:

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

    在登录屏幕中,我使用以下代码 forgotButtonAction 来呈现 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
       }
    

    【讨论】:

      【解决方案5】:

      如果有人还在为透明背景而苦苦挣扎,我前段时间找到了这个解决方案 - 我不记得在哪里,但仍然可以使用最新的 Xcode 和 Swift。

      ContactListViewController2: UIViewController, UITableViewDelegate, UITableViewDataSource,UIViewControllerTransitioningDelegate {
      
      required init?(coder aDecoder: NSCoder) {
          super.init(coder: aDecoder)
      
          self.modalPresentationStyle = .custom
          self.transitioningDelegate = self
      }
      

      【讨论】:

        猜你喜欢
        • 2015-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多