use*_*902 6 uiviewcontroller ios swift
在展示或解雇VC时,我不想继续隐藏和显示tabBar,因为它会造成糟糕的用户体验.相反,我希望在标签栏上直接显示下一个VC,这样当我通过从左向右缓慢拖动来关闭nextVC时,我可以看到隐藏在视图后面的tabBar(如下图所示)
请注意,我的应用程序有两个选项卡,其中包含两个与之关联的VC(VCA,VCB).两个VC都嵌入了导航栏.VCA分段为VCA1,VCB分段为VCB1.目前,在VCA和VCB内部,我调用以下函数来查看viewWillappear(下面的代码)时的一些隐藏和取消隐藏.
self.navigationController?.showViewController(vc, sender: self)
Run Code Online (Sandbox Code Playgroud)
// 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
}
Run Code Online (Sandbox Code Playgroud)
----------来自GOKUL的工作解决方案-----------
Gokul的回答很接近.我已经玩了他的解决方案,并提出了以下改进,以消除冗余VC的需要,并且还消除了在tabVC出现之前短暂显示的初始VC.但没有Gokul,我永远不会想到这个!
另外,Gokul的方法会为我创建一个错误,因为即使我在tabVC显示之前确实有一个初始的"普通"VC作为LoginVC.如果用户需要登录,则此loginVC仅为rootVC.因此,在大多数情况下,通过将rootVC设置为tabVC,将永远不会注册navVC.
解决方案是将导航控制器和tabBar控制器嵌入到一个VC中.但它仅在navVC位于TabBarVC之前才有效.我不知道为什么但是允许我使用navVC-> tabVC-> VC1/VC2的唯一方法是先用VCV嵌入VC1,然后再点击VC1再嵌入tabVC(它不允许我插入一个之前) tabVC和我还必须在嵌入NavVC后再次单击VC1).
第一种方法是使用创建选项卡栏的图像UIGraphicsGetImageFromCurrentImageContext并将其设置在另一个视图的底部......
第二种方法是在选项卡栏上方的另一个新窗口中显示下一个视图,这样您就不再需要隐藏选项卡栏,但似乎它在导航控制器中,所以这种方式似乎不可用
| 归档时间: |
|
| 查看次数: |
2537 次 |
| 最近记录: |