Ios 隐藏选项卡栏并在按钮上显示NavigationController工具栏单击

Ios 隐藏选项卡栏并在按钮上显示NavigationController工具栏单击,ios,objective-c,uinavigationcontroller,uitabbarcontroller,Ios,Objective C,Uinavigationcontroller,Uitabbarcontroller,我有以下视图层次结构: 选项卡栏控制器->导航控制器->自定义视图控制器 在我的自定义视图中,我希望选项卡栏消失并显示工具栏。很像在iOS7原生照片应用程序中按下“选择”键 我尝试了我找到的不同解决方案,但成功地得到了: 选项卡栏隐藏,工具栏显示为黑色间隙 隐藏选项卡栏和隐藏工具栏 选项卡栏隐藏工具栏显示,与底部有间隙。但是,自定义视图内容会到达屏幕底部(在工具栏下,与选项卡栏位于同一位置) 与我发现的其他解决方案不同的是,我需要在单击时而不是推送时执行此操作 我尝试过的一些事情: // #1

我有以下视图层次结构:

选项卡栏控制器->导航控制器->自定义视图控制器

在我的自定义视图中,我希望选项卡栏消失并显示工具栏。很像在iOS7原生照片应用程序中按下“选择”键

我尝试了我找到的不同解决方案,但成功地得到了:

  • 选项卡栏隐藏,工具栏显示为黑色间隙
  • 隐藏选项卡栏和隐藏工具栏
  • 选项卡栏隐藏工具栏显示,与底部有间隙。但是,自定义视图内容会到达屏幕底部(在工具栏下,与选项卡栏位于同一位置)

  • 与我发现的其他解决方案不同的是,我需要在单击时而不是推送时执行此操作

    我尝试过的一些事情:

    // #1
    [self.navigationController.toolbar setHidden:!isSelecting];
    [self.tabBarController.tabBar setHidden:isSelecting];
    
    // #2
    self.hidesBottomBarWhenPushed = YES;
    
    // #3
    #1 & #2 variants @ different controller along the path
    

    从下面的答案中选择此类别

    UITabBarController+HideTabbar.h

    #import <UIKit/UIKit.h>
    
    @interface UITabBarController (HideTabbar)
    - (void)setHidden:(BOOL)hidden animated:(BOOL)animated;
    @end
    

    最终,在玩了这些设置之后,我成功地让它工作了。我不知道为什么它现在能用,以前不能用,所以我很感谢你的评论

    情节提要:

  • 将自定义视图控制器标记为选中“按下时隐藏底部栏”
  • 将导航控制器标记为选中的“显示工具栏”
  • 代码:

    在按钮上单击隐藏/取消隐藏选项卡栏:
    [self.tabBarController.tabBar setHidden:state]

    这几乎奏效了。按下按钮时会隐藏/取消隐藏选项卡栏,但唯一的问题是切换选项卡时选项卡栏最初是隐藏的。我不得不做一些额外的努力使它可见

    在切换选项卡时,将
    uitabarcontrollerdelegate
    设置为取消隐藏选项卡栏。我是在一个定制的
    SUSourceTabController
    中完成的:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.delegate = self;
    }
    
    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:   (UIViewController *)viewController
    {
        [self.tabBar setHidden:NO];
    }
    
    我们还需要为自定义视图控制器代码中的第一个选项卡视图取消隐藏它。在代码中的任何其他位置使用
    setHidden:NO
    都不起作用

    - (void)viewDidLoad
    {
        [super viewDidLoad];    
        [self.tabBarController.tabBar setHidden:NO];
    }
    

    “与我发现的其他解决方案不同的是,我需要点击而不是推送。”。。。什么?你能分享一些你所取得成就的代码或截图吗?您是否尝试调整自定义视图控制器的视图大小以填补您的黑色空白?当您触摸“选择”按钮时,我怀疑照片应用程序正在进行模式演示(没有动画)。如果您提供一个具有工具栏的控制器,它将覆盖选项卡栏,并提供您在照片中看到的外观。@LordZsolt,我的意思是,我认为建议在按下时使用
    hidesbottombar
    的答案在这种情况下不起作用。但也许我错了。@NikolasBurk,我没有试着调整大小。添加了一些代码。啊,它真的帮助了我。但是,对我来说,将“按下时隐藏底部栏”设置为true就足够了。谢谢唯一能让我得到我想要的答案。需要有一个表VC控制器在一个选项卡有一个“编辑”选项。编辑模式允许多个选择。我需要隐藏选项卡栏并显示工具栏。我使用的是iOS9,切换选项卡和工具栏状态非常简单(我做的和OP一样)。这个答案说明了如何防止切换选项卡时隐藏选项卡栏。另外,我不需要做第二部分(“第一个选项卡视图的取消隐藏”),因为我使用第二个选项卡作为起始选项卡(在自定义TabController的viewDidLoad中使用selectedIndex=1)无法消除间隙(xcode 8,iOS 8.2)。要解决此问题,必须使用另一个工具栏而不是self.navigationController.toolbar,并添加一个约束“底部空间到Superview=0”而不是“底部布局指南”。如果您将底部空间约束到Superview而不是@Xyand的解决方案实现的布局指南,并且在iPhone X上正常工作,则在iPhone X上看起来与预期不一样。
    - (void)viewDidLoad
    {
        [super viewDidLoad];    
        [self.tabBarController.tabBar setHidden:NO];
    }