【问题标题】:Tab bar appearing after popping a view controller弹出视图控制器后出现的标签栏
【发布时间】:2013-04-05 07:48:56
【问题描述】:

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

viewController.hidesBottomBarWhenPushed = YES;

我正在导航到另一个底部有标签栏的视图控制器。

问题是当我将视图控制器弹出回视图控制器时,标签栏也会出现在该视图中。 弹出视图控制器时有没有办法隐藏标签栏?

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

提前致谢。

【问题讨论】:

  • 显示代码你是怎么放tabbar的?

标签: ios objective-c xcode4.5


【解决方案1】:

在这种情况下 viewWillAppear 方法会很有用。在您的 firstviewcontroller 中输入此代码

-(void)viewWillAppear:(BOOL)animated
{
   self.tabBarController.tabBar.hidden = YES;
}

所以当 secondviewcontroller 弹出时它会调用这个方法并且你的底栏会被隐藏。

【讨论】:

  • 我试过了,但这不起作用,因为此时视图控制器实际上没有被推送。场景是用户导航返回时。
  • 此方法在用户导航返回时调用,而不是在用户推送另一个视图时调用,因此您必须声明viewController.hidesBottomBarWhenPushed = YES; 2 次。第一个在viewDidLoad 方法中,第二个在viewWillAppear mthod。
  • 我尝试在视图中设置属性也加载了..但标签栏仍然存在。
  • 哦,我犯了一个愚蠢的错误,我复制了您的标签栏隐藏代码,但它仅适用于 secondview 推送时,这就是它不起作用的原因。现在我已经编辑了我的代码。所以现在把viewController.hidesBottomBarWhenPushed = YES; 放入viewDidLoad 方法和self.tabBarController.tabBar.hidden = YES; 放入viewWillAppear 方法它会解决你的问题。
  • 不,这并没有解决问题。底部仍然有一个空白空间。
【解决方案2】:

点击后退按钮时放置

[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.hidesBottomBarWhenPushedYESNO 按照您的要求

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

【讨论】:

  • 我也试过这个。问题是你可以隐藏标签栏,它在底部留下一个空白空间。当我尝试将视图框架设置为全屏时,它不起作用。
  • 如你所说,firstview 有底栏,然后推它会隐藏对吗?当从推送的 viewController 中弹出时,它应该隐藏......这是你的要求还是我错过了什么
  • firstview(有底栏)-> secondview(隐藏底栏)->thirdview(有底栏)然后我弹出thirdview并导航回第二个视图底栏在那里..我需要摆脱它。如果我按照你的建议去做,它会在底部留下一个空白空间。
  • 一旦看到我编辑的答案伙计...将它放在第三个查看按钮后退操作中.. 好吗?并在第二个视图按钮后退操作中放置这个 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);
  • 这没有正确设置框架。难道没有比这更简单的方法吗?
【解决方案3】:

根据您应用的设计,您可以将中心对象设置为导航控制器的委托。并隐藏/显示标签栏。这个问题hidesBottomBarWhenPushed but when popped 也提供了一个解决方案,但我不喜欢。顺便说一句,当用户浏览到第二级或更深层次时,再次显示底栏并不常见。

【讨论】:

    【解决方案4】:

    您可以改为在标签栏控制器上显示第二个视图控制器。如果你想让第二个视图控制器有一个导航栏,你可以把它放在一个新的导航控制器中。

    如果这种方式不能解决您的问题,您可以构建一个自定义标签栏控制器,以便它可以位于导航控制器中。您可以将第二个视图控制器推送到该导航控制器。创建自定义标签栏控制器,可以参考Apple Documentation on Creating Custom Container View Controllers。我认为它在 iOS 5 及更高版本上运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      相关资源
      最近更新 更多