2

我试图让我的应用程序正常工作,以便在根视图控制器中,没有导航栏可见,并且当我将另一个视图控制器推送到我的堆栈上(使用 Storyboard segues)时,导航栏动画进入视图(淡入视图作为视图滑入视图)。

正如其他 SO 文章中所推荐的,我的根控制器中有以下内容:

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

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

导航栏确实出现/消失了,只是没有动画(淡入/淡出)。

我使用的是黑色半透明条,但我尝试了所有类型的条,没有区别。这是在 iPhone 应用程序上。我也尝试过模拟器和非模拟器。有任何想法吗?

我现在创建了一个视频,展示了我的应用程序正在做什么:

http://youtu.be/B9fuCc2Jqtg

所以要明确一点,它正在正确地出现和消失,但它是突然发生的。我试图让它在这个过渡期间淡入/淡出。

我现在在 Xcode 4 / iOS 5.1 中添加了一个指向我的演示项目的链接:

https://www.dropbox.com/sh/mwsgjyup4iumy2r/QNN7xkHXSt

更新/回答:最终结果证明我的代码正在“工作”,因为它正在按照 Apple 的意图进行操作,动画导航栏滑入视图。我的错误印象是它也应该同时将导航栏从不可见淡化为可见,但这不是它的工作原理。

感谢@E。Lüders 的动画代码,展示了如何按照我的意图进行操作。

4

2 回答 2

3

我刚刚实现了这个测试代码,它工作正常。在我的故事板中,导航栏是可见的。

//  ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end


//  ViewController.m
#import "ViewController.h"

@implementation ViewController

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

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

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Hide navigationbar on view load
    [self.navigationController setNavigationBarHidden:YES];
    // Do any additional setup after loading the view, typically from a nib.
}

@end


//////////////////////////////////////////////////////////////
// This controller gets pushed                              //
//////////////////////////////////////////////////////////////

//  ViewController2.h
#import <UIKit/UIKit.h>
@interface ViewController2 : UIViewController
@end


//  ViewController2.m
#import "ViewController2.h"
@implementation ViewController2
@end

希望这可以帮助。


编辑:

如果您想在导航栏上显示淡入/淡出效果,请将上面的代码更改为:

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

    [UIView animateWithDuration:0.5f animations:^{
        self.navigationController.navigationBar.alpha = 0.0f;
    } completion:^(BOOL finished) {}];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    self.navigationController.navigationBar.alpha = 0.0f;
    [self.navigationController setNavigationBarHidden:NO animated:animated];

    [UIView animateWithDuration:0.5f animations:^{
        self.navigationController.navigationBar.alpha = 1.0f;
    } completion:^(BOOL finished) {}];
}
于 2012-09-05T07:28:46.740 回答
1

您可以在隐藏动画块之前将 Alpha 设置为 0,而不是设置隐藏。

像这样的东西:

- (void)viewWillAppear:(BOOL)animated
{
    //fade Animation
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.0];
    self.navigationController.view.alpha = 0.0;
    [UIView commitAnimations];

    [self.navigationController setNavigationBarHidden:YES animated:animated];
    [super viewWillAppear:animated];
}
于 2012-09-05T07:00:58.243 回答