9

我正在使用 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 秒才能获得与标签栏一致的平滑效果。

4

4 回答 4

3

你为什么不让按钮成为你的标签栏的一部分。

tabBarController.tabBar.addSubView(yourButton)

一切都会解决。干杯!

于 2016-10-20T01:21:20.283 回答
1

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

UIButton *customTabButton;

在按下时调用隐藏底栏时,将按钮属性设置为隐藏,如果底栏可见,则在其他视图中再次将其重置。

    shareFbButton.hidden=YES;

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

 if(self.tabBarController.tabBar.isHidden){

 // set or reset the custom button visibility here 
}

这是一种方式。

于 2012-08-16T19:54:53.313 回答
0

选中此项以在 上放置一个按钮UITabBar。看看它是否在 with 之后有效hidesBottoBarWhenPushed

于 2012-06-27T12:08:07.993 回答
0

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

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

2)当新的视图控制器被按下时,动画离开按钮。

第一个将需要处理未记录、不受支持且随时可能更改的 iOS 专有视图层次结构。

第二个问题是让动画看起来足够流畅,让您的用户不会注意到。这不完全是表现完美的问题,只是表现得恰到好处。

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

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

现在这不会使按钮的行为与标签栏完全相同,但是由于过渡的速度如此之短,因此用户不会真正注意到它。

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

于 2012-08-20T22:44:32.850 回答