UITabBarController 自定义按钮在移动到下一个 ViewController 时不隐藏

Posted

技术标签:

【中文标题】UITabBarController 自定义按钮在移动到下一个 ViewController 时不隐藏【英文标题】:UITabBarController Custom Button not hiding while moving to next ViewController 【发布时间】:2017-03-09 07:08:47 【问题描述】:

我在UITabBarViewController中添加了自定义中心按钮,代码如下...

self.centerButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.centerButton.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin;
self.centerButton.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);
[self.centerButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
[self.centerButton setBackgroundImage:highlightImage forState:UIControlStateHighlighted];

CGFloat heightDifference = buttonImage.size.height - self.tabBar.frame.size.height;
  if (heightDifference < 0) 
        self.centerButton.center = self.tabBar.center;
   else 
        CGPoint center = self.tabBar.center;
        center.y = center.y - heightDifference/2.0;
        self.centerButton.center = center;
  

[self.centerButton addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:self.centerButton];

请查看随附的屏幕截图以供参考,

现在,当我在移动到其他视图控制器时尝试隐藏它时,只有标签栏被隐藏,而不是带有以下代码的中心自定义按钮,

[self.tabBarController.tabBar setHidden:YES];

也试过这样隐藏中心自定义按钮,

 WBTabBarController *objWBTab = [self.storyboard instantiateViewControllerWithIdentifier:ID_CNTRL_TABBAR];
 [objWBTab setTabBarHidden:YES];

SetTabBarHidden 已在 WBTabBarController.m 中定义如下,

- (void)setTabBarHidden:(BOOL)tabBarHidden

    self.centerButton.hidden = tabBarHidden;
    self.tabBar.hidden = tabBarHidden;

还是不行,谁能帮帮我?

【问题讨论】:

为什么不直接将UIButton 添加为标签栏的子视图而不是self.view 由于自定义按钮的高度较大,所以我必须在 self.view 中添加它,我不能在标签栏中添加它 那么将剪辑的边界设置为标签栏的假不是做同样的事情吗?就像按钮可以在标签栏的边界之外可见 哦,是的。你是绝对正确的。我试过这个。但是通过在标签栏中添加它..我的按钮不再显示。如果你能帮我多一点就好了.. 好吧好吧..我明白了。框架正在创建问题。因此,之前它已添加到 self.view 中,现在它位于 tabar 中。所以我需要稍微修改一下帧逻辑。非常感谢你的帮助!你节省了我的时间。谢谢 【参考方案1】:

这是因为您将按钮作为子视图添加到整个视图而不是 tabBar 的视图。

[self.view addSubview:self.centerButton];换成[self.tabBar addSubview:self.centerButton];

【讨论】:

自定义按钮未添加到我的底部栏中。在tabbarviewcontroller的self.view中添加。所以如果我要隐藏底部栏,自定义按钮将不会被隐藏。由于自定义按钮的高度较大,因此我必须将其添加到 self.view 中,而无法将其添加到选项卡中【参考方案2】:

尝试在 Push 上检查 Hide Bottom Bar 以使您的 ViewController 在情节提要上打开

或者你也可以通过编程方式使用它

      self.hidesBottomBarWhenPushed = true
      let destinationVC = self.storyboard?.instantiateViewControllerWithIdentifier("StoryBoardID") as! yourVC
      self.navigationController?.pushViewController(destinationVC, animated: true)
      self.hidesBottomBarWhenPushed = false

【讨论】:

【参考方案3】:

让我们在视图消失时尝试隐藏它

-(void) viewWillDisappear:(BOOL)animated
     [self setTabBarHidden:YES];
     [super viewWillDisappear:animated];

并在视图出现时显示

-(void) viewWillAppear:(BOOL)animated
     [self setTabBarHidden:NO];
     [super viewWillAppear];

【讨论】:

viewWillDisappear 在从 tabbarcontroller 移动到其他 viewcontroller 时没有被调用 :(

以上是关于UITabBarController 自定义按钮在移动到下一个 ViewController 时不隐藏的主要内容,如果未能解决你的问题,请参考以下文章

自定义标签栏按钮,而不是 UITabBarController

为啥由 UITabBarController.viewDidLoad 中的代码添加的自定义按钮不响应选择器

在 UITabBarController 中自定义更多选项卡

单击 UITabBarController 时的自定义操作

从 UITabBarController 调用 SFSafariViewController 并在按下“完成”后返回

UIkit框架(14)自定义标签控制器