我有一个自定义UINavigationController
,可以绘制自定义背景。在根视图控制器上访问self.navigationController
时,已设置该导航控制器。现在我要做的是推动一个新的视图控制器,但将新视图控制器中的导航控制器替换为默认控制器(没有自定义背景)。
基本上,新的视图控制器呈现的图像导航栏是半透明的。因为它从根视图控制器重用导航控制器(带有自定义背景),所以最终效果是具有自定义背景的半透明导航栏。
我知道在将新视图控制器呈现为模态视图时,我可以替换导航栏。但是在推动新的视图控制器时可以替换它吗?
我试过这样的事情,但这段代码没有效果:
LTImageViewController* controller = [[LTImageViewController alloc] init];
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:self];
[navController pushViewController:controller animated:YES];
答案 0 :(得分:2)
您不能只将视图控制器推到任何旧的导航控制器堆栈上。 (嗯,你可以,但你不会走得太远。)导航控制器应该是应用程序窗口的根视图控制器。如果要使用自定义导航控制器,则应将现有导航控制器替换为自定义版本。你会做类似的事情:
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
delegate.window.rootViewController = [[MyCustomNavController alloc] init];
答案 1 :(得分:1)
在UINavigationController中推送视图控制器时,它会创建一个堆栈,我认为我们无法在另一个中推送导航控制器。
你可以做一件事以模态方式显示你的viewController并将TransitionStyle更改为UIModalTransitionStyleCoverVertical
可能会帮助
答案 2 :(得分:0)
如果您的问题只是导航栏的样式/颜色/图像,请在视图控制器的viewWillAppear:
中设置:
[self.navigationController.navigationBar setBackgroundImage:yourImage
forBarMetrics:UIBarMetricsDefault];