我正在努力让我的应用程序工作,以便在根视图控制器中,没有可见的导航栏,当我将另一个视图控制器推入我的堆栈(使用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应用程序上。我也试过模拟器和非模拟器。有什么想法吗?
我现在创建了一个视频,展示了我的应用正在做什么:
所以,为了清楚,它正在出现并正确消失,但它突然发生。我想在这个过渡期间让它淡入/淡出。
我现在在Xcode 4 / iOS 5.1中添加了一个指向我的演示项目的链接:
https://www.dropbox.com/sh/mwsgjyup4iumy2r/QNN7xkHXSt
更新/答案:最终证明我的代码“正常工作”,因为它正在按照Apple的意图进行操作,使导航栏滑动到视图中。我的错误印象是它同时也应该将导航栏从隐形变为可见,但这不是它的工作方式。
感谢@E。 Lüders的动画代码,展示了如何做我想要的。
答案 0 :(得分: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) {}];
}
答案 1 :(得分:1)
除了设置Hidden之外,你可以在隐藏它之前将动画块中的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];
}