当呈现或关闭 VC 时,我不想继续隐藏和显示 tabBar,因为它会造成糟糕的用户体验。相反,我想直接在选项卡栏上呈现下一个 VC,这样当我通过从左向右缓慢拖动来关闭下一个 VC 时,我可以看到隐藏在视图后面的选项卡栏(如下图所示)
请注意,我的应用程序有两个选项卡,其中有两个与之关联的 VC(VCA、VCB)。两个 VC 都嵌入了导航栏。 VCA 继续到 VCA1,VCB 继续到 VCB1。目前,在 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 的工作解决方案------------
戈库尔的回答几乎是正确的。我研究了他的解决方案,并提出了以下改进,以消除冗余 VC 的需要,并消除在 tabVC 出现之前短暂显示的初始 VC。但如果没有 Gokul,我永远不会想出这个!!
此外,Gokul 的方法会给我带来一个错误,因为即使在显示 tabVC 之前我确实有一个初始“正常”VC 作为 LoginVC。如果用户需要登录,则此登录VC 仅是rootVC。因此,在大多数情况下,通过将 rootVC 设置为 tabVC,navVC 将永远不会被注册。
解决方案是将导航控制器和 tabBar 控制器嵌入到一个 VC 中。但只有当 navVC 位于 TabBarVC 之前时它才有效。我不知道为什么,但允许我拥有 navVC-> tabVC-> VC1/VC2 的唯一方法是先用 navVC 嵌入 VC1,然后再次单击 VC1 嵌入 tabVC (它不允许我在之前插入一个) tabVC 和我在嵌入 NavVC 后还必须再次单击 VC1)。