我在使用hidesBottomBarWhenPushed时遇到了麻烦...... 我将把三个控制器--A,B和C - 按顺序推入导航控制器,我想在显示B时隐藏底部标签栏。(和A是一个标签控制器)
有人有想法吗?
答案 0 :(得分:9)
在视图控制器A(位于tabBar上),当到达B时(无需tabBar):
self.hidesBottomBarWhenPushed = YES; // hide the tabBar when pushing B
[self.navigationController pushViewController:viewController_B animated:YES];
self.hidesBottomBarWhenPushed = NO; // for when coming Back to A
在视图控制器B中,当需要呈现C(tabBar再次想要)时:
self.hidesBottomBarWhenPushed = NO; // show the tabbar when pushing C
[self.navigationController pushViewController:viewController_C animated:YES];
self.hidesBottomBarWhenPushed = YES; // for when coming Back to B
答案 1 :(得分:7)
我发现有时这太晚了,而不是在viewDidLoad中设置它。在init中设置它或覆盖hidesBottomBarWhenPushed为没有底部工具栏的视图返回YES。
答案 2 :(得分:2)
来自hidesBottomBarWhenPushed文档:
如果是,则底部栏保持隐藏状态,直到视图控制器为止 从堆栈中弹出。
这意味着如果您不必知道视图控制器的推送顺序,那么除了topViewController之外,您需要堆栈中的所有视图控制器将其hidesBottomBarWhenPush设置为false。 / p>
所以我做的是
这里有一些代码1和2)
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
self.hidesBottomBarWhenPushed = false
if (segue.identifier == "MyViewControllerWhoHidesTabBar") {
let viewController: MyViewControllerWhoShowsTabBar = segue.destinationViewController as! MyViewControllerWhoShowsTabBar
viewController.hidesBottomBarWhenPushed = true
}
// rest of implementation....
}
3)我已将后退按钮操作覆盖为
func backButtonClick(sender:UIButton!) {
let viewControllers = self.navigationController!.viewControllers
if let vc = viewControllers[viewControllers.count-2] as? MyViewController {
if vc.isKindOfPageYouDontWannaShowTheTabBar() == true {
vc.hidesBottomBarWhenPushed = true
}
}
navigationController?.popViewControllerAnimated(true)
}