弹出视图控制器后出现选项卡栏

6

我正在开发一款iOS应用程序,在该应用程序中,我正在使用选项卡控制器。从选项卡控制器中导航到另一个视图控制器。在推送视图控制器之前,我设置了该控制器的属性。

viewController.hidesBottomBarWhenPushed = YES;

我正在导航到另一个视图控制器,该控制器在底部有选项卡栏。

问题是当我从该视图控制器返回时,选项卡栏也出现在该视图中。 有没有办法在弹出视图控制器时隐藏选项卡栏?

如果有人能帮我解决这个问题,那就太好了。

提前感谢。


请展示一下你是如何放置TabBar的代码? - Manu
4个回答

3
在这种情况下,viewWillAppear方法会很有用。在您的第一个视图控制器中放置以下代码。
-(void)viewWillAppear:(BOOL)animated
{
   self.tabBarController.tabBar.hidden = YES;
}

当第二个视图控制器弹出时,它将调用此方法并隐藏底部栏。


我尝试过这个,但是这不起作用,因为视图控制器实际上在此时没有被推送。情况是当用户返回导航时。 - era
1
该方法在用户返回时调用,而不是在用户推入其他视图时调用,因此您必须声明 viewController.hidesBottomBarWhenPushed = YES; 2 次。首先在 viewDidLoad 方法中,其次在 viewWillAppear 方法中。 - Dilip Manek
我尝试在视图加载中设置属性,但是选项卡栏仍然存在。 - era
哦,我犯了一个愚蠢的错误,我复制了你的隐藏选项卡代码,但它只适用于当第二个视图被推送时,所以它不起作用。现在我已经编辑了我的代码。所以现在将viewController.hidesBottomBarWhenPushed = YES;放在viewDidLoad方法中,将self.tabBarController.tabBar.hidden = YES;放在viewWillAppear方法中,这将解决你的问题。 - Dilip Manek
不好意思,这并没有解决问题。底部仍然有一个空白的空间。 - era
显示剩余2条评论

0

在点击返回按钮时,请放置此代码

[self.tabBarController.tabBar setHidden:YES];

[UIView animateWithDuration:0.5
                     animations:^{
                         self.tabBarController.tabBar.frame = CGRectMake(self.tabBarController.tabBar.frame.origin.x, self.tabBarController.tabBar.frame.origin.y+self.tabBarController.tabBar.frame.size.height, self.tabBarController.tabBar.frame.size.width, self.tabBarController.tabBar.frame.size.height);
                 }

我有另一个答案……

将这两种方法放在所有的ViewController中,并管理BOOL变量self.hidesBottomBarWhenPushed,根据需要将其设置为YESNO

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.hidesBottomBarWhenPushed = YES;
}
- (void)viewDidDisappear:(BOOL)animated
{   
    self.hidesBottomBarWhenPushed = NO;
}

我也尝试过这个。问题是你可以隐藏选项卡栏,但会在底部留下空白。当我尝试将视图框架设置为全屏时,它没有起作用。 - era
根据您所说,首先firstview有底部栏,然后推出去后它会隐藏,对吗?当从推出的视图控制器返回时,它应该隐藏...这是您的要求还是我漏掉了什么? - Manu
首先视图(带底部栏)-> 第二视图(隐藏底部栏)->第三视图(带底部栏) 然后,我弹出第三视图并返回到第二个视图,底部栏仍然存在...我需要摆脱它。如果按照您建议的操作,会在底部留下空白。 - era
看一下我编辑过的答案,把它放在第三个视图按钮的返回操作中...好吗?在第二个视图按钮的返回操作中放置这个 self.tabBarController.tabBar.frame = CGRectMake(self.tabBarController.tabBar.frame.origin.x, self.tabBarController.tabBar.frame.origin.y, self.tabBarController.tabBar.frame.size.width, self.tabBarController.tabBar.frame.size.height); - Manu
这样做无法正确设置框架。难道没有比这更简单的方法吗? - era

0

根据您的应用程序设计,您可以将中心对象设置为导航控制器的代理。并隐藏/显示选项卡栏。这个问题hidesBottomBarWhenPushed but when popped也提供了一个解决方案,但我不喜欢。顺便说一下,当用户浏览到第二层或更深层时,重新显示底部栏并不常见。


0

你可以在选项卡控制器上呈现第二个视图控制器。如果你想让第二个视图控制器有一个导航栏,你可以把它放在一个新的导航控制器里面。

如果这种方式不能解决你的问题,你可以构建一个自定义的选项卡控制器,使其可以在导航控制器中。你可以将第二个视图控制器推到该导航控制器中。要创建自定义选项卡控制器,你可以参考Apple文档关于创建自定义容器视图控制器。我认为它在iOS 5及以上版本上运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接