使用 UINavigationController 执行 segue(没有 IBAction)

Performing segue with UINavigationController (without IBAction)

给你看图再解释更容易。

仪表板故事板

我在名为 ContainerViewController 的容器视图中嵌入了 2 个单独的 UIViewControllers(我只在绘图中包含了一个,另一个不相关)。

Post 故事板

NewPostViewController 显示 UIButton 呈现 TextPostViewController。如您所见,它们都嵌入在 UINavigationControllers 中。现在,一旦调用了新 post 的完成块,我就必须呈现 ContainerViewController 并且它需要处理自己的逻辑。问题是它嵌入在 UINavigationController 中,一旦我展示它,UITaBbar 就被隐藏了。

我试过这样做:

self.performSegue(withIdentifier: "TextPostToNavContainerVC", sender: nil)

转换成功但我丢失了 UITabBar,即使在 DashboardViewControllerContainerViewController 我调用了:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    tabBarController?.tabBar.isHidden = false

}

我做错了什么或者有更好的方法吗?

您应该实例化选项卡栏控制器。不是视图控制器。 想象一下,您将一个初始视图控制器放在标签栏控制器之前。让你的标签栏不被推送

如果我没理解错的话。 你在做这个 Segue connect to a view controller 但你实际上应该这样做 Segue connected to a tab bar controller

您可以尝试将其添加为子项以像这样控制它的框架

let textPost = self.storyboard?.instantiateViewController(withIdentifier: "containerID") as! TextPostToNavContainerVC
textPost.view.frame =  CGRect(x:20,y:0,width:self.view.frame.width,height:self.view.frame.height-50)
self.view.addSubview(nvc.view)
self.addChildViewController(textPost)
textPost.didMove(toParentViewController: self)