我有一个应用程序,其中第一个屏幕(应用程序的菜单)不需要导航栏但应用程序的其余部分确实如此。
我正在使用的代码工作得很好,因为菜单屏幕上没有导航栏,并且存在于应用程序的其他位置但是大问题是,一旦你回到菜单,导航栏就会出现一瞬间然后消失。
这不是一个非常平稳的过渡。
如何进行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 :(得分: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。