使用 Segue 返回到 TabBarController 的初始 ViewController 后,TabBar 被隐藏

TabBar is hidden after going back to the initial ViewController of a TabBarController Using Segue

我有一个带有三个 table 视图控制器的选项卡栏控制器,第二个 VC 嵌入在导航控制器中。在第二个 VC 中,我使用此行 self.tabBarController?.tabBar.isHidden = true 隐藏了 tabBar 并创建了一个条形按钮以返回到第一个视图控制器,即使用 segue 的“主页” VC模态表示。

Screenshot of my StoryBoard

我的问题是在按下后退按钮并从第二个 VC 返回主页 VC 后,即使我将 self.tabBarController?.tabBar.isHidden = false 放在主页中,tabBar 仍然隐藏 VC 的 viewWillAppear 方法和第二个 VC 的 viewWillDisappear 方法。

这是我预期的结果与我得到的结果

expected home VC

result home VC

如何让标签栏显示出来?

当您使用模态显示转场时,您正在创建一个全新的 HomeViewController 实例。新的 HomeViewController 未 linked 到层次结构中的 TabBarController。

这是您的初始视图层次结构:

TabBarController
 -> HomeVC
 -> CreateVC (Navigation Controller)
    -> CreateQuizVC
 -> SavedVC

现在点击后退按钮后,您将获得以下内容:

TabBarController
 -> HomeVC
 -> CreateVC (Navigation Controller)
   -> CreateQuizVC
     -> HomeVC(2)
 -> SavedVC

您可以做的是,不要使用 segue 返回,而是在您的代码中添加一个 IBAction,以编程方式设置 TabBar 的 selectedIndex,并将 Back UIBarButtonItem link 添加到此 IBAction。

@IBAction func backButtonAction(_ backButton: UIBarButtonItem) {
    // Keep in mind that the CreateQuizVC is embeded in a NavigationController.
    // The NavigationController is the child of the TabBarController
    navigationController?.tabBarController?.selectedIndex = 0
    navigationController?.tabBarController?.tabBar.isHidden = false
}

但是,我的建议是按照 Apple 的预期使用 TabBar。在展示 CreateQuizVC 时不要隐藏它,并使用 TabBar 在选项卡之间导航。这将有助于改善用户体验,因为 iOS 上的每个人都期待 TabBar 的这种行为。