如何在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