如何隐藏UITabBar?

Posted

技术标签:

【中文标题】如何隐藏UITabBar?【英文标题】:How to hide UITabBar? 【发布时间】:2009-05-02 21:38:22 【问题描述】:

在我的应用程序中,我有一个标签栏。在某些视图中,我也有一个工具栏。因此,当我使用工具栏查看这些视图时,它看起来很丑 - 视图底部有两个栏。我认为在输入这些特定视图时隐藏标签栏是最佳解决方案。 但我只是不知道如何以正确的方式做到这一点。我尝试将 UITabBarController 的 tabBar 隐藏属性设置为 YES,但没有成功。而且我也尝试在我的任何观点中做以下事情:

self.hidesBottomBarWhenPushed = YES;

但效果不佳。

这种情况的正确解决方案是什么?我不想在任何视图中都有 2 个条形图。

【问题讨论】:

【参考方案1】:

您必须在要推送的控制器上将 hidesBottomBarWhenPushed 属性设置为 YES,而不是设置为 UITabBarController。

otherController.hidesBottomBarWhenPushed = YES;
[navigationController pushViewController: otherController animated: TRUE];

或者您可以在首次初始化要推送的控制器时设置该属性。

【讨论】:

我有 UITabBarController 可以呈现的三个视图控制器。在第二个视图控制器上,我将self.hidesBottomBarWhenPushed = YES 放入initWithNibName:bundle:。当我测试进入第二个视图控制器时,UITabBar 仍然存在。 ios7 尝试了一个新项目 - 没有效果 当我回到屏幕时,我的标签栏顶部有一个黑色空间。【参考方案2】:

界面构建器在标签栏中嵌入了视图控制器的复选框 - 推送时隐藏底部栏。在简单的情况下,现在不需要通过代码来完成。

为了@Micah

【讨论】:

这在 ios7 上对我有用,在代码中没有设置相同的值 这个复选框在哪里? 在目标视图控制器上执行此操作,而不是源! 你能帮我吗:***.com/questions/51963911/…【参考方案3】:

我也为此苦苦挣扎了一段时间。隐藏标签栏是朝着正确方向迈出的一步,但会留下一个黑色矩形。诀窍是调整支持 UIViewController 视图的层的大小。

我在这里写了一个小演示,有一个解决方案:

https://github.com/tciuro/FullScreenWithTabBar

我希望这会有所帮助!

【讨论】:

很棒的提示,希望我能投票更多。我什至不知道有一个支持 UIViewController 的层!【参考方案4】:

不要使用此解决方案!

BOOL hiddenTabBar;
UITabBarController *tabBarController;

- (void) hideTabBar 

     [UIView beginAnimations:nil context:NULL];
     [UIView setAnimationDuration:0.4];
     for(UIView *view in tabBarController.view.subviews)
     
          CGRect _rect = view.frame;
          if([view isKindOfClass:[UITabBar class]])
          
               if (hiddenTabBar) 
                    _rect.origin.y = [[UIScreen mainScreen] bounds].size.height-49;
                    [view setFrame:_rect];
                else 
                    _rect.origin.y = [[UIScreen mainScreen] bounds].size.height;
                    [view setFrame:_rect];
               
           else 
               if (hiddenTabBar) 
                    _rect.size.height = [[UIScreen mainScreen] bounds].size.height-49;
                    [view setFrame:_rect];
                else 
                    _rect.size.height = [[UIScreen mainScreen] bounds].size.height;
                    [view setFrame:_rect];
               
          
         
     [UIView commitAnimations];

     hiddenTabBar = !hiddenTabBar;

Source

【讨论】:

使用自定义标签栏 (ALTabBar)。这个对我有用。为了支持 4" 屏幕,我将 480 更改为 [[UIScreen mainScreen] bounds] -> size.height 很好,但是...尽量不要使用固定值,如 431 或 480。您应该始终编写代码以在任何屏幕尺寸下运行! 如果你想真正调整视图的大小(不仅仅是隐藏 tabBar)设置 self.tabBarController.tabBar.hidden = hiddenTabBar;【参考方案5】:

没有内置方法可以隐藏当前视图的标签栏。

您可以在使用hidesBottomBarWhenPushed 变量推送视图时隐藏它。

如果要在当前视图中隐藏标签栏,可以执行以下操作:

Gist here

请注意,UIKit 似乎将标签栏带回应用程序恢复。所以你必须订阅通知UIApplication.didBecomeActiveNotification并调用上面的函数。

【讨论】:

以上是关于如何隐藏UITabBar?的主要内容,如果未能解决你的问题,请参考以下文章

如何隐藏UITabBar?

UITabBar的隐藏

如何在 iOS 11 和 iPhone X 上实现隐藏 UITabBar 以显示 UIToolbar

推送 UIView 时隐藏 UITabBar

使用 UITabBar 或 UIToolBar

UITabBar 将隐藏 UITableView 的最后一个单元格