注意,我的应用程序有两个标签,分别与两个视图控制器(VCA、VCB)相关联。两个视图控制器还嵌入了导航栏。目前,在VCA和VCB中,我调用以下函数进行视图跳转,并在viewWillappear时进行一些隐藏和显示(代码如下)。
self.navigationController?.showViewController(vc, sender: self)
// Inside ViewWillAppear Only reappear the tab bar if we successfully enter Discover VC (To prevent drag back half way causing tab bar to cause comment entry to be floating). This code check if we have successfully enters DiscoverVC
if let tc = transitionCoordinator() {
if tc.initiallyInteractive() == true {
tc.notifyWhenInteractionEndsUsingBlock({(context: UIViewControllerTransitionCoordinatorContext) -> Void in
if context.isCancelled() {
// do nothing!
}
else {
// not cancelled, do it
self.tabbarController.tabBar.hidden = false
}
})
} else {
// not interactive, do it
self.tabbarController.tabBar.hidden = false
}
} else {
// not interactive, do it
self.tabbarController.tabBar.hidden = false
}
----------GOKUL的有效解决方案----------
Gokul的答案几乎是正确的。我尝试了他的解决方案并得出了以下改进,以消除需要冗余VC的需求,同时也消除了在tabVC出现之前短暂显示初始VC的需要。但是没有Gokul,我永远不会想出这个方法!
此外,Gokul的方法对我来说会产生一个错误,因为即使我有一个初始的“普通”VC作为LoginVC,在显示tabVC之前。如果用户需要登录,此loginVC仅是rootVC。因此,在大多数情况下将rootVC设置为tabVC,将导致无法注册navVC。
解决方案是将导航控制器和选项卡控制器嵌入一个VC中。但是,它仅在navVC位于TabBarVC之前才能正常工作。我不确定为什么,但允许我拥有navVC->tabVC->VC1 / VC2的唯一方法是先嵌入带有navVC的VC1,然后再次单击VC1以嵌入tabVC(它不允许我在tabVC之前插入一个,我还必须在嵌入NavVC后再次单击VC1)。