我有以下设置:
标签栏应用。 在一个选项卡上有一个导航控制器。
我的工作流程:
当我将新的viewController推送到导航控制器堆栈时,我设置了hidesBottomBarWhenPushed属性。
这很好用,当新视图控制器滑动到位时,标签栏会被“推”。
问题:
当我弹出此视图控制器并再次显示根视图控制器时,标签栏已消失。
导航控制器已经增长,以填充标签栏留下的空间。
我是否需要设置一个属性才能再次显示标签栏?
我尝试过:
手动弹出到根视图
为根视图设置(重置)hidesBottomBarWhenPushed
调整根视图的大小
调整导航控制器的视图属性的大小(只留下标签栏所在的“空格”)
什么“sorta”工作:
如果我将标签栏控制器的选定索引设置为任何其他索引,则会出现标签栏。所以我知道它仍然“存在”,但这对我没什么帮助。
答案 0 :(得分:107)
我也有这个问题。我在错误的视图控制器上设置-hidesBottomBarWhenPushed。
错了(但在弹出之前似乎有效):
self.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:self.anotherViewController animated:animated];
右:
self.anotherViewController.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:self.anotherViewController animated:animated];
答案 1 :(得分:9)
这是我遇到的同样问题,但我得到了一个解决方案,试试这个 我发现隐藏然后在推送后立即显示标签栏,解决了我们的问题
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSDictionary *theItem = [items objectAtIndex:indexPath.row];
DetailController *nextController = [[DetailController alloc] initWithItem:theItem];
self.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:nextController animated:YES];
//
//[nextController setHidesBottomBarWhenPushed:YES];
self.hidesBottomBarWhenPushed=NO;
[nextController release];
}
答案 2 :(得分:6)
如果您正在使用UINavigationController
并寻找在一个视图控制器中隐藏TabBar(BottomBar)的方法,请将此代码放在您想隐藏TabBar的视图控制器中:
- (BOOL)hidesBottomBarWhenPushed {
return [self.navigationController.visibleViewController isEqual:self];
}
我尝试过设置属性的其他方法导致TabBar在使用隐藏的TabBar从视图控制器推送新视图控制器后隐藏(即使将属性设置为NO后)。
答案 3 :(得分:1)
我在我的应用程序中执行类似的操作 - 只需调用:
[self.navigationController popToRootViewControllerAnimated:YES];
似乎可以做到这一点并且标签栏又回来了 - 不可否认,这是响应按下按钮而不是导航栏弹出按钮。我似乎记得它在使用导航栏后退按钮时工作正常。
或许检查您是否只设置单个视图控制器以将hidesBottomBarWhenPushed属性设置为YES。
答案 4 :(得分:1)
除此之外:
[self.navigationController popToRootViewControllerAnimated:YES];
最初执行self.hidesBottomBarWhenPushed = YES;
您必须更改viewControllerToBePushed.hidesBottomBarWhenPushed = YES;
那应该做的工作!
答案 5 :(得分:1)
好奇,我从来没有设置过这个值,但是在我想要的ViewController上覆盖它:
- (BOOL) hidesBottomBarWhenPushed
{
return YES;
}
答案 6 :(得分:1)
<强>迅速强>:
self.hidesBottomBarWhenPushed = true
self.performSegueWithIdentifier("viewcontroller_details", sender: nil)
self.hidesBottomBarWhenPushed = false
答案 7 :(得分:0)
在弹出工具栏的视图控制器出现后,尝试这个魔术:
- (void)viewWillAppear:(BOOL)animated {
[self.navigationController setToolbarHidden:YES animated:YES];
}
答案 8 :(得分:0)
Swift 3:从代码中,你必须将pushController.hidesBottomBarWhenPushed设置为true。
<强>故事板:强> 选择推送的控制器,转到属性检查器,选择&#34;在推送&#34;上隐藏底栏View Controller下的选项。
答案 9 :(得分:0)
我遇到了同样的问题,我无法使用此处提到的任何建议方法来解决它。
我想出了一个解决这个问题的hacky方法并且它工作正常,尽管在我的情况下可能因为我正在使用RxSwift,这个问题似乎是一个竞争条件所以我稍微延迟弹出操作并手动显示 tabBar,不过它也可能解决您的问题:
if self.tabBarController?.tabBar.isHidden == true {
self.tabBarController?.tabBar.isHidden = false
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
self.navigationController?.popViewController(animated: true)
}
} else {
self.navigationController?.popViewController(animated: true)
}