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

bjo*_*ern 9 uitabbarcontroller ios ios5

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

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

// .. created a UIButton *button
[self.view addSubview:button];
Run Code Online (Sandbox Code Playgroud)

)

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

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

有任何想法吗?

更新: 我的解决方案:在我的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){
                     }];
    }
}
Run Code Online (Sandbox Code Playgroud)

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

NSP*_*mer 0

我认为有两种方法可以实现这一点。

1)尝试将按钮放入旧顶视图控制器和选项卡栏上方但在推送的新顶视图控制器下方的视图中。

2)当按下新的视图控制器时,动画关闭按钮。

第一个需要清理 iOS 专有的视图层次结构,该层次结构没有文档记录,不受支持,并且可能随时更改。

第二个问题是让动画看起来足够流畅,让用户不会注意到。这并不完全是行为完美的问题,只是表现得得体而已。

我个人会推荐按钮消失的动画(将其 alpha 设置为 0)并根据标签栏上的视图控制器是否出现或消失重新出现。

导航动画(我相信)是 0.3 秒。如果按钮位于选项卡栏的中间,您可能希望当视图控制器中的动画到达它时(如果不是更早的话)它不可见,因此可以使用 0.1 到 0.15 秒之间的时间来将其动画化。

现在,这并不会使按钮的行为与选项卡栏完全相同,但由于转换的速度如此之短,用户实际上不会注意到它。

现在只是提供一个问题让您问自己。为什么需要推送与选项卡栏重叠的视图控制器?为什么这比呈现模态视图控制器更可取/更有必要?如果您可以强烈反对它,请坚持下去,祝您好运,但是如果没有必要,您也许可以使用模态视图控制器实现您想要的体验。