ナビゲーションバーとタブバーのあるビューがあります。私がしたいのは、特定のビューでタブバーを非表示にし、ユーザーがビューを変更したときにタブバーを再び表示することです。
タブバーを非表示にするコードのスニペットを見ました:
-(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];
そのビューで表示/非表示を切り替えると正常に機能しますが、前のビューに戻ると、タブバーも非表示になります。ビューのviewDidUnload
、viewWillDisappear
、viewDidDisappear
関数でその関数を呼び出してみましたが、何も起こりません。前のビューのviewDidLoad
、viewWillAppear
、viewDidAppear
関数で関数が呼び出された場合も同様です。
代わりにUIViewController.hidesBottomBarWhenPushedを設定できます。
DetailViewController *detailViewController = [[DetailViewController alloc] init];
detailViewController.hidesBottomBarWhenPushed = YES;
[[self navigationController] pushViewController:detailViewController animated:YES];
[detailViewController release];
UITabBarControllerにカテゴリを作成しました。これにより、オプションでアニメーションを使用してTabBarを非表示にできます。
https://github.com/idevsoftware/Cocoa-Touch-Additions/tree/master/UITabBarController_setHidden
tabBarHidden
プロパティ(isTabBarHidden
をゲッターとして使用)および- (void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animated
メソッドを追加します。
非表示/表示のためにこれを試してください。
-(void)viewWillDisappear:(BOOL)animated{
self.hidesBottomBarWhenPushed = NO;
}
-(void)viewWillAppear:(BOOL)animated{
self.hidesBottomBarWhenPushed = YES;
}
self.navigationController.hidesBottomBarWhenPushed=YES;
この行をviewdidload
またはviewWillAppear
に追加すると、タブが下から隠れます。
Swift 3:viewwillAppearまたはviewdidappearでタブバーの非表示を設定します
self.tabBarController?.tabBar.isHidden = true
XibまたはストーリーボードファイルでView Controllerをクリックすると、属性インスペクターで同じプロパティを使用できます。