当hidesBottomBarWhenPushed为“TRUE”时,如何隐藏自定义标签栏按钮

我正在使用Tito的代码片段向我的标签栏添加自定义按钮: https : //github.com/tciuro/CustomTabBar

(对UITabbarController进行子类化并使用添加自定义按钮

// .. created a UIButton *button [self.view addSubview:button]; 

这适用于我的基于故事板的应用程序,除了导航控制器中的子视图的情况,启用了“隐藏推杆底部栏”选项。 这会按照承诺隐藏标签栏,但不会隐藏自定义按钮。 似乎按钮应作为子视图添加到标签栏本身? 我尝试了这个丑陋的代码甚至没有显示按钮:

 for(UIView *view in self.view.subviews) { if([view isKindOfClass:[UITabBar class]]) { [view addSubview:button]; break; } } 

有任何想法吗?

更新:我的解决方案:在我的ApplicationDelegate中,我定义了以下方法,我在viewWillAppear或viewWillDisappear方法中需要时调用这些方法:

 -(void)hideCenterButton:(BOOL)animated { if(animated){ [UIView animateWithDuration:0.3 delay:0.0f options:UIViewAnimationCurveLinear animations:^{ CGRect frame = self.centerButton.frame; frame.origin.x = -100; self.centerButton.frame = frame; } completion:^(BOOL finished){ }]; } } -(void)showCenterButton:(BOOL)animated { if(animated){ [UIView animateWithDuration:0.35 delay:0.0f options:UIViewAnimationCurveLinear animations:^{ CGRect frame = self.centerButton.frame; frame.origin.x = (self.view.superview.frame.size.width / 2) - (self.centerButton.frame.size.width / 2); self.centerButton.frame = frame; } completion:^(BOOL finished){ }]; } } 

我必须将动画的持续时间设置为0.35秒才能获得与标签栏协调的平滑效果。

我认为有两种方法可以解决这个问题。

1)尝试将按钮放入旧俯视图控制器上方的视图和按下的新顶视图控制器下方的标签栏BUT。

2)按下新视图控制器时,将按钮设置为动画。

第一个将需要与iOS专有视图层次结构混淆,该层次结构未记录,不受支持并且可能随时更改。

第二个问题是让动画看起来足够流畅,让用户不要注意。 这并不完全是表现完美的问题,只是恰当地表现出来。

我个人会推荐一个按钮消失的动画(将它的alpha设置为0的动画),并根据你的视图控制器是否出现或消失而重新出现。

导航的动画是(我相信)0.3秒。 如果按钮位于标签栏的中间,您可能会希望它不可见,因为视图控制器中的动画到达它(如果不是更快),因此可以使用0.1到0.15秒之间的动画来为其设置动画。

现在这不会使按钮的行为与标签栏完全相同,但由于过渡的速度太短,对用户来说真的是不明显的。

现在只是提出一个问题让你问自己。 为什么需要推动与标签栏重叠的视图控制器? 为什么比呈现模态视图控制器更可取/更必要? 如果您可以强烈争辩,请坚持下去并祝您好运,但如果没有必要,您可以通过模态视图控制器实现您想要的体验。

处理此问题的一种简单方法是在文件的.h中创建按钮实例。

 UIButton *customTabButton; 

在push上调用hides bottom bar时,将button属性设置为hidden,如果底栏显示,则在其他视图中再次重置它。

  shareFbButton.hidden=YES; 

你可以检查这是所有文件的viewDidLoad,并在需要时放置这行代码,以确保显示按钮并在所需的所有页面上隐藏按钮。

  if(self.tabBarController.tabBar.isHidden){ // set or reset the custom button visibility here } 

这是一种方式。

为什么不将按钮作为标签栏的一部分。

 tabBarController.tabBar.addSubView(yourButton) 

一切都会解决。 干杯!

选中此项以在UITabBar上放置一个按钮。 使用hidesBottoBarWhenPushed查看它是否有效。