iOS导航栏平滑过渡

时间:2013-06-26 10:47:33

标签: iphone ios ipad uinavigationbar

我有一个应用程序,其中第一个屏幕(应用程序的菜单)不需要导航栏但应用程序的其余部分确实如此。

我正在使用的代码工作得很好,因为菜单屏幕上没有导航栏,并且存在于应用程序的其他位置但是大问题是,一旦你回到菜单,导航栏就会出现一瞬间然后消失。

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

如何进行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];
}

4 个答案:

答案 0 :(得分:2)

试试这个,

-(void) viewWillAppear: (BOOL)animated {

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

希望它可以帮助你...

答案 1 :(得分: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];
}

答案 2 :(得分:0)

在视图中将此设置确实在应用的第一个屏幕中消失

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

这是在第二个VC的viewdiddisappear中出现的

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

答案 3 :(得分:0)

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

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

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