如何在第一次加载时隐藏tabBar,并在以后的屏幕上显示?

时间:2010-08-16 15:20:08

标签: iphone objective-c uiviewcontroller uitabbarcontroller

.hidesBottomBarWhenPushed = NO;不起作用,因为视图没有被推动。我希望tabBar隐藏在第一个屏幕上,以后能够再显示几个屏幕。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

这很难,因为tabbars被设计为应用程序UI的顶级。文档非常明确。因此,它们在控制器层次结构中不能很好地发挥作用。

实际上,实现所需内容的唯一方法是以编程方式创建标签栏。但是,我不能说会产生可靠的代码。标签栏将一直与你搏斗。

你真的应该重新考虑你的UI设计。以非标准方式使用标签栏会使您的用户感到困惑。由于标准是在UI顶层设置标签栏,因此用户在看到标签栏时会认为它们处于顶层。他们会迷失方向。您确实需要坚持标准用法,以便您的应用程序与用户已学习的界面语法一致。

请参阅iPhone Human Interface Guidelines.

答案 1 :(得分:1)

对UITabBarController进行子类化并添加类似这样的函数

- (void) hideTabBar:(BOOL)hide animated:(BOOL)animated {

    if (tabBarHidden == hide) { return; }

    if (animated) {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:1.5];
    }

    for(UIView *view in self.view.subviews) {

        if([view isKindOfClass:[UITabBar class]]) {

            if (!hide) {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y-49, view.frame.size.width, view.frame.size.height)];
            } else {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y+49, view.frame.size.width, view.frame.size.height)];
            }
        } else {
            if (!hide) {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height-49)];
            } else {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height+49)];
            }

        }
    }

    if (animated) { [UIView commitAnimations]; }

    tabBarHidden = hide;

}   

虽然您可以在此处添加此类功能以允许标签栏旋转

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return allowRotate;
}