弹出View Controller后,设置hidesBottomBarWhenPushed会丢失底栏

时间:2009-06-24 19:39:59

标签: iphone cocoa-touch uikit

我有以下设置:

标签栏应用。 在一个选项卡上有一个导航控制器。

我的工作流程:

当我将新的viewController推送到导航控制器堆栈时,我设置了hidesBottomBarWhenPushed属性。

这很好用,当新视图控制器滑动到位时,标签栏会被“推”。

问题:

当我弹出此视图控制器并再次显示根视图控制器时,标签栏已消失。

导航控制器已经增长,以填充标签栏留下的空间。

我是否需要设置一个属性才能再次显示标签栏?


我尝试过:

手动弹出到根视图

为根视图设置(重置)hidesBottomBarWhenPushed

调整根视图的大小

调整导航控制器的视图属性的大小(只留下标签栏所在的“空格”)

什么“sorta”工作:

如果我将标签栏控制器的选定索引设置为任何其他索引,则会出现标签栏。所以我知道它仍然“存在”,但这对我没什么帮助。

10 个答案:

答案 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)
}