31

我有一个带有标签栏控制器的应用程序,每个视图都包含一个导航控制器。我的 MainWindow 如下所示:图片在这里 http://www.freeimagehosting.net/image.php?7bc867a594.png

一切正常,但是在将详细信息视图推送到导航控制器时我注意到了一个问题。在属于标签栏控制器的 tableviewcontroller 的 didSelectRowAtIndexPath 中(图像中称为最新的那个)我这样做:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ArticleViewController *articleController = [[ArticleViewController alloc] initWithNibName:@"ArticleView" bundle:nil];

    [self.navigationController pushViewController:articleController animated:YES];

    [articleController release];
    articleController = nil;
}

ArticleViewController 有自己的标签栏,因为它需要显示不同的东西。问题是,当我将 ArticleViewController 推入 navigationController 时,我会在视图底部看到两个标签栏。有什么办法可以解决这个问题吗?

提前致谢

4

8 回答 8

99

在花了几个小时在这里发布一个问题后,我发现这个问题的解决方案是在 ArticleController 的实例化之后添加以下行。

articleController.hidesBottomBarWhenPushed = YES;
于 2010-06-01T06:50:27.913 回答
35

如果您更喜欢故事板配置而不是编码,则可以使用一个切换开关。只需转到destinationViewController > Attribute Inspector:

在此处输入图像描述

于 2015-12-23T13:26:02.000 回答
17

一个非常简单的解决方案:

 destinationViewController.hidesBottomBarWhenPushed = YES;

在你的情况下:

 articleController.hidesBottomBarWhenPushed = YES;

希望这可以帮助!

于 2013-02-26T07:37:34.270 回答
5

您可以在要推送的视图控制器中添加以下代码。

-(BOOL)hidesBottomBarWhenPushed
{ 
     return YES;
}

这将仅隐藏推送视图控制器中的选项卡栏,并且当您弹出视图控制器选项卡栏时,所有视图控制器都保持未隐藏状态。

Swift 版本(3.x 及以上)

override var hidesBottomBarWhenPushed: Bool {
    get {
        return navigationController?.topViewController == self
    }
    set {
        super.hidesBottomBarWhenPushed = newValue
    }
}

谢谢

于 2016-10-22T20:15:27.630 回答
5

您可以通过 storyboard 简单地隐藏父标签栏。

选择viewcontroller > Attribute Inspector >检查 Hide Bottom Bar on Push

于 2017-10-12T07:08:56.650 回答
1

对于 swift 3,通过在 pushviewController 代码之前取消隐藏标签栏来编写相同的代码,如下所示

var frame = self.tabBarController?.tabBar.frame
frame?.origin.y = self.view.frame.size.height - (frame?.size.height)!+112
UIView.animate(withDuration: 0.2, animations: {
  self.tabBarController?.tabBar.frame = frame!
})
self.navigationController?.pushViewController(viewController, animated: true)

或使用 whant 取消隐藏您可以使用的标签栏

viewController.hidesBottomBarWhenPushed = false
于 2017-09-26T06:01:45.707 回答
1

在此处输入图像描述

转到 Xcode 中的界面构建器 -> 打开属性检查器并检查您不想显示选项卡栏的视图控制器的“在推送时隐藏底部栏”项。它会工作的!

于 2017-09-28T07:08:20.727 回答
1

使用hidesBottomBarWhenPushed要隐藏的控制器中的属性。

对于隐藏,所有控制器放入prepare for segue

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    segue.destination.hidesBottomBarWhenPushed = true
}
于 2019-08-13T17:46:32.810 回答