2013-06-26 64 views
1

我有一个应用程序,其中第一个屏幕(应用程序的菜单)不需要导航栏,但应用程序的其余部分。iOS导航栏平滑过渡

我使用的代码工作正常,导航栏不在菜单屏幕上,并且出现在应用程序的其他地方,但是大问题是,一旦你回到菜单,导航栏出现大约一秒钟,然后消失。

这不是一个非常平稳的过渡。

如何使SMOOTHER过渡,以便导航栏在返回菜单屏幕时甚至不会出现一秒?

这里是我使用的代码:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 

    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     [self.navigationController setNavigationBarHidden:YES animated:NO]; 
    } 
    return self; 
} 

- (void)viewDidLoad { 
    [self.navigationController setNavigationBarHidden:YES animated:NO]; 
    [super viewDidLoad]; 
} 

-(void) viewDidAppear: (BOOL)animated { 
    [[self navigationController] setNavigationBarHidden:YES animated:NO]; 

    [super viewDidAppear:animated]; 
} 
+0

你能解释这与'xcode'有关吗? – Popeye

+0

Xcode提供了用于处理“模拟指标”下的导航条的选项,这些选项在这里可能有用或可能不会有帮助 - 我不想将此视为解决方案的可能组件。 – user1470914

+0

这与'xcode'没有任何关系,'xcode'标签保留给与'xcode IDE'本身相关的问题,而不是你在'xcode'内发现的问题。所以'xcode IDE'的一个问题就是“为什么xcode'打不开?”和“我如何更新'xcode'?和问题本身 – Popeye

回答

2

尝试这样,

-(void) viewWillAppear: (BOOL)animated { 

    [super viewWillAppear:animated]; 
    [[self navigationController] setNavigationBarHidden:YES animated:YES]; 
} 

希望这可以帮助你......

+0

上面没有什么区别,我应该提到我试过”动画:是的“在所有3个领域,没有运气。谢谢Erik。 – user1470914

0

本集在视图中没有消失在应用程序的第一个屏幕上

[[self navigationController] setNavigationBarHidden:NO animated:YES]; 

,这在第二VC的viewdiddisappear

[self.navigationController setNavigationBarHidden:YES animated:NO]; 
1

在你的第一个视图控制器:

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

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

在你的第二个视图控制器(不是必要的,但对于代码清晰好的做法):

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

而不是隐藏和显示导航栏,您可以更新导航栏的alpha。它将在过渡期间顺利进行动画制作。对于具有透明导航栏的视图控制器,而不是修改导航栏,请在第二个控制器的视图中手动创建一个导航栏(或只是后退按钮和标题等)。当从第一个视图控制器转换到第二个视图控制器时,我们将隐藏导航栏。

在您的第二个控制器的viewWillDisappear和第一个视图控制器的viewWillAppear:上,使用self.navigationController.navigationBar.alpha = 0;将导航栏alpha设置为零。由于这是在动画块中,这将导致导航栏在推动动画期间消失。

将alpha设置回第二个控制器的viewWillAppear和第一个控制器viewWillDisappear中的一个。