用户使用 Firebase 注销后,根控制器 UINavigationBar 消失

Posted

技术标签:

【中文标题】用户使用 Firebase 注销后,根控制器 UINavigationBar 消失【英文标题】:Root Controller UINavigationBar disappears after user logout with Firebase 【发布时间】:2019-02-14 21:11:24 【问题描述】:

我的 UINavigationBar 遇到了一个小问题。

我有一个初始根视图控制器 (ViewController),后跟 2 个视图控制器(LoginMRNViewController 和 LoginOTPViewController),用于使用一次性密码登录用户。我也有 NavigationController 用于在登录后将用户导航到他/她的主页。 在主页中,我有一个 (Logout) 按钮,该按钮使用 Firebase 注销用户并将他/她导航到初始根视图控制器 (ViewController)。

UINavigationBar 就像一个魅力,然而,每当用户注销时,他被导航到初始根视图控制器 (ViewController) 但 UINavigationBar 完全消失了!

我的注销功能:

@IBAction func logoutPressed(_ sender: Any) 
    do 
        try Auth.auth().signOut()

        self.performSegue(withIdentifier: "goToLoginScreen", sender: self)
        print ("User logged out")
     catch let error 
        print ("Failed to logout with error", error)
    

这是我的Storyboard 的样子。

编辑:

我试图在 ViewWillAppear 方法中将它放在我的初始根视图控制器 (ViewController) 和其他 2 个视图控制器(LoginMRNViewController 和 LoginOTPViewController)中,但不幸的是它不起作用。

self.navigationController?.setNavigationBarHidden(false, animated: false)
tabBarController?.tabBar.isHidden = false

这是我更新后的Storyboard 的样子。

【问题讨论】:

为什么要在主视图控制器之前放置另一个导航控制器? 我添加了另一个导航控制器来删除主页上的后退按钮,因此用户无法返回登录屏幕。我不知道这是否是正确的方法,但它对我有用。 这不是正确的方法。每个应用程序应该只有一个导航控制器。我认为您的第二个导航控制器是导致问题的原因。删除那个导航控制器,从现在开始只使用第一个。要隐藏后退按钮,只需使用“navigationItem.setHidesBackButton(true, animated: true)” 我删除了第二个导航控制器并添加了方法,它隐藏了主页返回按钮。但不幸的是,用户注销后 UINavigationBar 仍然处于隐藏状态! 然后尝试简单地将“self.navigationController?.setNavigationBarHidden(false, animated: false)”放入 Root VC 的 viewWillAppear 方法中。 【参考方案1】:

不要添加另一个 NavigationController 来隐藏后退按钮。

添加navigationItem.setHidesBackButton(true, animated: true) 隐藏后退按钮。

然后在注销时只需添加self.navigationController?.popToRootViewController(animated: true)

它应该按预期工作。

【讨论】:

我完全按照你说的做了,但现在我遇到了另一个问题,即注销按钮无法将用户导航到初始根视图控制器。 @AseelM 您的意思是说注销不会将用户导航到您有登录按钮的 ViewController? 是的,我就是这个意思。 您是否在 NavigationController 上推送所有视图 [从第一个到仪表板]?或者你正在展示任何东西? 是的,我所有的视图都被推送到 NavigationController 上。我没有展示任何东西。

以上是关于用户使用 Firebase 注销后,根控制器 UINavigationBar 消失的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Auth - 更新用户的电子邮件后,Firebase Auth 会注销用户

当我使用重新加载功能时,Firebase Auth 会注销我吗?

如何在颤动中自动注销firebase用户?

注销后,身份验证firebase会记住我

Firebase - 重新打开应用程序后用户注销时应用程序关闭

如何从应用程序远程强制注销firebase auth用户