当呈现或解散VC时,我不想继续隐藏和显示tabBar,因为它会创建糟糕的用户体验。相反,我想将下一个VC直接放在标签栏上,这样当我通过从左向右缓慢拖动下一个VC时,可以看到隐藏在视图后面的TabBar(如下图所示)当前视图控制器当前带有NavigationController的tabBarController
注意,我的应用程序有两个与两个VC(VCA,VCB)相关联的选项卡。这两个VC也都嵌入了导航栏。 VCA继续到VCA1,VCB继续到VCB1。目前,在VCA和VCB内部,我正在调用以下函数以在viewWillapar(下面的代码)中执行一些隐藏和取消隐藏操作。
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
}
----------从戈库尔工作液-----------
戈库尔的答案是接近现货上。我使用了他的解决方案,并提出了以下改进措施,以消除冗余VC的需求,并且在tabVC出现之前也消除了短暂显示的初始VC。但没有Gokul,我永远不会想出这个!
此外,Gokul的方法会为我创建一个错误,因为即使在显示tabVC之前,我确实有一个初始的“正常”VC作为LoginVC。如果用户需要登录,则此loginVC仅为rootVC。所以通过在大多数情况下将rootVC设置为tabVC,navVC将永远不会被注册。
解决方案是将导航控制器和tabBar控制器嵌入到一个VC中。但它只有在navVC位于TabBarVC之前时才起作用。我不知道为什么,但让navVC-> tabVC-> VC1/VC2的唯一方法是首先将VC1与navVC嵌入,而不是再次单击VC1以嵌入tabVC(它不允许我先插入一个tabVC和我也不得不在嵌入NavVC后再次点击VC1)。
很好解释,并很好的解决方案!非常感谢。我已经更新了我的回答,并对上述任何需要改进的人员进行了改进 – user172902
谢谢edward。 :) – Gokul