web-dev-qa-db-ja.com

iOSのナビゲーションバーでビューのタブバーを非表示/表示するにはどうすればよいですか?

ナビゲーションバーとタブバーのあるビューがあります。私がしたいのは、特定のビューでタブバーを非表示にし、ユーザーがビューを変更したときにタブバーを再び表示することです。

タブバーを非表示にするコードのスニペットを見ました:

-(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;
}

from: http://nickwaynik.com/iphone/hide-tabbar-in-an-ios-app/

これをタブバーを非表示にするビューで呼び出します

[self makeTabBarHidden:YES];

そのビューで表示/非表示を切り替えると正常に機能しますが、前のビューに戻ると、タブバーも非表示になります。ビューのviewDidUnloadviewWillDisappearviewDidDisappear関数でその関数を呼び出してみましたが、何も起こりません。前のビューのviewDidLoadviewWillAppearviewDidAppear関数で関数が呼び出された場合も同様です。

58
dork

代わりにUIViewController.hidesBottomBarWhenPushedを設定できます。

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

これは、ストーリーボードのInterface Builderでも実行できます。 Tab Barを非表示にするView Controllerを選択し、「プッシュ時に下部バーを非表示にする」を選択します。

enter image description here

35
Suragch

UITabBarControllerにカテゴリを作成しました。これにより、オプションでアニメーションを使用してTabBarを非表示にできます。

https://github.com/idevsoftware/Cocoa-Touch-Additions/tree/master/UITabBarController_setHidden

tabBarHiddenプロパティ(isTabBarHiddenをゲッターとして使用)および- (void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animatedメソッドを追加します。

13
boliva

非表示/表示のためにこれを試してください。

-(void)viewWillDisappear:(BOOL)animated{
    self.hidesBottomBarWhenPushed = NO;
}
-(void)viewWillAppear:(BOOL)animated{
    self.hidesBottomBarWhenPushed = YES;
}
2
alicanozkara
self.navigationController.hidesBottomBarWhenPushed=YES;

この行をviewdidloadまたはviewWillAppearに追加すると、タブが下から隠れます。

2
Yogesh Dalavi

Swift 3:viewwillAppearまたはviewdidappearでタブバーの非表示を設定します

self.tabBarController?.tabBar.isHidden = true
1
Sandu

以下のコードを使用できますが、戻るときにtabBarは非表示のままです。

    //hide tabbar
    //self.tabBarController?.tabBar.isHidden = true

より良い方法は、main.storyboard check "Hide Bottom Bar on Push"私がやったように。

enter image description here

0
Soropromo

XibまたはストーリーボードファイルでView Controllerをクリックすると、属性インスペクターで同じプロパティを使用できます。

0
ShowPony