隐藏标签栏和导航栏

Posted

技术标签:

【中文标题】隐藏标签栏和导航栏【英文标题】:hide tabbar and navigation bar 【发布时间】:2014-05-25 20:53:04 【问题描述】:

这是我的设置: 应用程序启动时主屏幕有 4 个按钮。每个按钮都将您带到一个新的视图/子视图。每个子视图都有一个后退按钮(通过导航控制器)带您回到主/菜单屏幕。很容易。而且效果很好。但是,这是我想要做的: 主屏幕有 4 个按钮到 4 个不同的视图。在主屏幕上,您看到的只是主页/菜单,没有标签。但是,当您转到 4 个视图选项中的任何一个时,将出现一个选项卡栏,其中填充有 4 个子视图的选项卡。如果我们想返回主菜单,还会有一个导航栏。

本质上是这样:主菜单显示没有标签栏。 4 个子视图显示标签栏和导航栏。我搞砸了一堆东西,但无法让它工作。关于如何做到这一点的任何想法?

【问题讨论】:

【参考方案1】:

你可以通过让你的故事板看起来像这样来实现这一点:

然后在YourMainMenuViewController的实现中:

- (void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];

    [self.navigationController setNavigationBarHidden:YES animated:animated];


- (void)viewWillDisappear:(BOOL)animated

    [super viewWillDisappear:animated];

    [self.navigationController setNavigationBarHidden:NO animated:animated];


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

    UITabBarController *tabVC = segue.destinationViewController;

    if ([segue.identifier isEqualToString:@"Tab1"]) 
        tabVC.selectedIndex = 0;
    
    else if ([segue.identifier isEqualToString:@"Tab2"]) 
        tabVC.selectedIndex = 1;
    
    else if ([segue.identifier isEqualToString:@"Tab3"]) 
        tabVC.selectedIndex = 2;
    
    else if ([segue.identifier isEqualToString:@"Tab4"]) 
        tabVC.selectedIndex = 3;
    

虽然我建议不要将标签栏控制器放在像这样的导航控制器中,因为它有点令人困惑的 UI。

【讨论】:

哇。 @DrBeardFace,如果我能拥抱你,我会的。非常感谢。这有效!并花时间绘制图表。苹果会因为这样做而拒绝应用商店中的这个应用吗? @Srmuhs 没问题!很难说苹果是否会因为这样的事情拒绝你的应用程序。我的意思是,它似乎工作得很好,但是pushViewController:animated:completion: 的official documentation 说“要压入堆栈的视图控制器 [...] 不能是标签栏控制器。”因此,如果我是你,我实际上可能会考虑完全放弃主菜单视图控制器,而只使用持久标签栏控制器,以确保安全。【参考方案2】:

在 viewWillAppear 上显示 navigationBar 实现这个

[self.navigationController setNavigationBarHidden:NO];

在 viewWillAppear 上显示 tabBar 实现这个

self.tabBarController.tabBar.hidden = NO;

您可以将它们设置为 YES 以使它们隐藏在 viewWillAppear 的菜单中

希望对你有帮助

【讨论】:

以上是关于隐藏标签栏和导航栏的主要内容,如果未能解决你的问题,请参考以下文章

Android 显示、隐藏状态栏和导航栏

通过标签栏和按钮导航屏幕

iOS导航栏和状态栏

状态栏、导航栏、PopupWindow的使用

iOS 获取状态栏、导航栏、tabBar高度

具有标签栏和导航栏的 iPhone 应用程序