0

我有一个UINavigationController绘制自定义背景的自定义。self.navigationController在根视图控制器上访问时已经设置了该导航控制器。现在我想做的是推送一个新的视图控制器,但将新视图控制器中的导航控制器替换为默认控制器(没有自定义背景)。

基本上,新的视图控制器正在呈现一个带有半透明导航栏的图像。因为它重用了来自根视图控制器的导航控制器(带有自定义背景),所以最终效果是带有自定义背景的半透明导航栏。

我知道在将新视图控制器呈现为模态视图时,我可以替换导航栏。但是在推送新的视图控制器时我可以替换它吗?

我试过这样的东西,但这段代码没有效果:

LTImageViewController* controller = [[LTImageViewController alloc] init];
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:self];
[navController pushViewController:controller animated:YES];
4

3 回答 3

2

您不能只将视图控制器推送到任何旧导航控制器的堆栈上。(嗯,你可以,但你不会走得太远。)导航控制器应该是应用程序窗口的根视图控制器。如果你想使用你的自定义导航控制器,你应该用你的自定义版本替换现有的导航控制器。你会做这样的事情:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
delegate.window.rootViewController = [[MyCustomNavController alloc] init];
于 2012-04-05T12:53:24.293 回答
1

在 UINavigationController 中推送视图控制器时,它会创建一个堆栈,我认为我们不能在另一个中推送导航控制器。

您可以做一件事以模态方式显示您的 viewController 并将 TransitionStyle 更改为 UIModalTransitionStyleCoverVertical

可能有帮助

于 2012-04-05T12:54:32.387 回答
0

如果您的问题只是导航栏的样式/颜色/图像,则viewWillAppear:可以在 viewControllers 中设置:

 [self.navigationController.navigationBar setBackgroundImage:yourImage                             
                                               forBarMetrics:UIBarMetricsDefault];
于 2012-04-05T13:02:54.120 回答