2009-08-19 68 views
5

我正在使用UINavigationController(旁注:在UITabBar内),默认情况下它会在顶部提供一个UINavigationBar。如果我通过IB隐藏栏,那么栏不仅用于根UIViewController,而且用于所有我推入堆栈的控制器。让我没有(自动)方式回弹。隐藏UINavigationBar仅用于根UIViewController

那么如何才能隐藏UINavigtionBar只在根UIViewController。开启/关闭“navigationBarHidden”暂时不起作用,因为这对动画看起来很尴尬。

还有其他想法吗?

+0

答案并不完全是我所追求的,但足够公平。 – tcurdt 2009-09-02 22:12:18

回答

5

我居然遇到了这个问题,我如何解决它是与UINavigationController的委托,我基本上有一个UINavigationController子类,并使其自身的委托,然后我实施的方法

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    if([viewController isKindOfClass: [SomeClass class]]) 
     [self setNavigationBarHidden: NO]; 
    else 
     [self setNavigationBarHidden: YES]; 
} 

所以,你问哪个类是它,如果它需要有一个导航条显示它,这对我很好...希望它有帮助

+0

这就是我所尝试的。但是,这会让酒吧出现在屏幕上,而不仅仅是在获得动画的视图中。当然应该没有动画就可以。但我想要动画。 – tcurdt 2009-08-19 17:40:35

+0

??你什么意思?它确实存在于屏幕上,但只有当你推动你需要的视图时才会出现,即使它是动画的......最新的问题是什么? – Daniel 2009-08-19 17:58:38

+0

如果你不想要酒吧本身的动画,你可以在 - navigationController:didShowViewController:animated:方法中编写相同的代码,这种方式只有在视图被推后才会出现。 – Daniel 2009-08-19 18:00:18

0

我的想法是不是使您的第一个视图的导航控制器的一部分。例如,有一个简单的TableViewController,然后当您想深入研究时,创建UINavigationController并手动推送它的视图。

我还没有试过这个,不知道它是否会工作,但。只是一个想法尝试。

+0

不幸的是,这不起作用,因为根控制器没有后退按钮。 – tcurdt 2009-08-19 17:42:05

+0

我想知道如果我能做到这一点,并*在UINavigationBar的左侧添加*按钮。将不得不尝试(虽然我现在去了一个不同的路线) – tcurdt 2009-08-28 00:02:07

0

你有几种不同的讨厌的方式,你可以做到这一点。事实上,您嵌入在UITAbBar控制器中实际上会使这种情况显着复杂化,因为无法区分是由于控制器被推送还是来自标签交换而调用viewDidAppear:,这意味着您可能需要将数据存储在某处以便知道什么导致过渡以及是否需要隐藏栏。

假设你搞定,一个选项是改变navigationBarHidden你有动画后,在出来的路上有来处理,因为你想要的动画吧发生后,弹出动画没有好地方。最快的解决方案是隐藏酒吧然后手动运行你的runloop约0.5秒,直到它动画出来,然后继续。它的毛病,但它很快,它的工作原理。

- (void)viewWillDisappear:(BOOL)animated { 
    if (animated) { 
    [self.navigationController.navigationBar setHidden:YES animated:YES]; 
    } 

    //GROSS 
    NSDate *endDate = [NSDate dateWithTimeIntervalSinceNow:0.5]; 
    while([[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:endDate]); 
} 

如果你想干净地做,我建议从零开始重新实现UINavigationController。

+0

你不需要从头开始实现任何东西,简单的子类UINavigationController将sufice,检查出我的答案。 – Daniel 2009-08-19 13:51:32

+0

你可以做到这一点,但根据你在做什么,你会得到很多有问题的交互与其他动画UINavigationController正在调度,因为他们都将被同时提交,你无法控制它们。过去我一直这样做,但只要我想做其他任何事情(比如自定义转换),它就会崩溃,它完全依赖于UINavigaitionController如何调度动画的内部时间。 – 2009-08-20 03:42:07

8

对我来说隐藏UInavigationBar后避免空白的最简单方法是隐藏或按以下方式显示您的UInaviagtionBar。

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewDidDisappear:animated]; 
    [self.navigationController setNavigationBarHidden:NO animated:YES]; 
} 
-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self.navigationController setNavigationBarHidden:YES animated:YES]; 
} 

与语法:self.navigationController.navigationBarHidden = YES;我总是有空白。

+0

我我正在使用方法,它对我来说效果很好 – CVertex 2011-03-08 01:00:32