如何在iOS中使用导航栏隐藏/显示视图的选项卡栏?

如何在iOS中使用导航栏隐藏/显示视图的选项卡栏?,ios,uinavigationcontroller,uitabbarcontroller,Ios,Uinavigationcontroller,Uitabbarcontroller,我有带导航栏和选项卡栏的视图。我希望在某个视图上隐藏选项卡栏,并在用户更改视图时再次显示选项卡栏 我看到一段隐藏选项卡栏的代码: -(void)makeTabBarHidden:(BOOL)hide { // Custom code to hide TabBar if ( [tabBarController.view.subviews count] < 2 ) { return; } UIView *contentView; if

我有带导航栏和选项卡栏的视图。我希望在某个视图上隐藏选项卡栏,并在用户更改视图时再次显示选项卡栏

我看到一段隐藏选项卡栏的代码:

-(void)makeTabBarHidden:(BOOL)hide
{
    // Custom code to hide TabBar
    if ( [tabBarController.view.subviews count] < 2 ) {
        return;
    }

    UIView *contentView;

    if ( [[tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] ) {
        contentView = [tabBarController.view.subviews objectAtIndex:1];
    } else {
        contentView = [tabBarController.view.subviews objectAtIndex:0];
    }

    if (hide) {
        contentView.frame = tabBarController.view.bounds;       
    }
    else {
        contentView.frame = CGRectMake(tabBarController.view.bounds.origin.x,
             tabBarController.view.bounds.origin.y,
             tabBarController.view.bounds.size.width,
             tabBarController.view.bounds.size.height - tabBarController.tabBar.frame.size.height);
    }

    tabBarController.tabBar.hidden = hide;
}

当我在该视图上显示/隐藏它时,它可以正常工作,但当我导航回上一个视图时,那里的选项卡栏也被隐藏。我试着在视图的
viewDidUnload
viewwilldemouse
viewdiddemouse
函数中调用该函数,但什么也没发生。在上一个视图的
viewDidLoad
中调用函数时也是如此,
视图将出现
viewdidearch
函数。

您可以在按下时设置UIViewController.hidesbottomBar:

DetailViewController *detailViewController = [[DetailViewController alloc] init];
detailViewController.hidesBottomBarWhenPushed = YES;
[[self navigationController] pushViewController:detailViewController animated:YES];    
[detailViewController release];

我刚刚在UITabBarController上创建了一个类别,允许您隐藏选项卡栏,可以选择使用动画:


它添加了
tabBarHidden
属性(以
istabarhidden
作为其getter)和
-(void)setTabBarHidden:(BOOL)hidden animated:(BOOL)动画的
方法。

当您在Xib或情节提要文件上单击视图控制器时,属性检查器上的相同属性可用。

您也可以在情节提要的界面生成器中执行此操作。选择要隐藏其选项卡栏的视图控制器,然后选择“按下时隐藏底部栏”

将此行添加到您的
viewDidLoad
视图将出现
;这将从底部隐藏您的选项卡。

Swift 3: 将选项卡栏设置为隐藏在
viewwillbeen
viewdidebeen

self.tabBarController?.tabBar.isHidden = true

为隐藏/显示尝试以下操作:

- (void)viewWillDisappear:(BOOL)animated {
    self.hidesBottomBarWhenPushed = NO;
}

- (void)viewWillAppear:(BOOL)animated {
    self.hidesBottomBarWhenPushed = YES;
}

您可以使用下面的代码,但返回时,
tabBar
仍处于隐藏状态

    //hide tabbar
    //self.tabBarController?.tabBar.isHidden = true
更好的方法是通过main.storyboard 如我所做的,选中“按下时隐藏底部栏”


如果不选择推送新控制器,那么这里有一个看起来很酷的解决方案,它应该可以让工具栏进出动画:太棒了。非常感谢你。让你知道你也可以在prepareForSegue中这样做。需要注意的一点是,集合的位置很重要。在回答中所示的位置设置
hidesbottombarwhenpush
有效,但如果在DetailViewController的
viewDidLoad
方法中设置它,则不起作用。如果横向模式修复程序可以自己签入,那将非常棒。也许会发送一个拉请求,@boliva?答案中最优雅的方式
- (void)viewWillDisappear:(BOOL)animated {
    self.hidesBottomBarWhenPushed = NO;
}

- (void)viewWillAppear:(BOOL)animated {
    self.hidesBottomBarWhenPushed = YES;
}
    //hide tabbar
    //self.tabBarController?.tabBar.isHidden = true