自定义导航栏而不影响层次结构中的其他视图控制器

时间:2014-08-22 08:15:56

标签: ios objective-c uinavigationcontroller uinavigationbar

我有一个需要克服的导航栏自定义问题,希望之前有人想要这样的行为。

在我的导航堆栈中有特定的视图控制器,我想要一个完全透明的导航栏,我使用此代码来执行此操作:

// Make navigation bar transparent
[self.navigationController.navigationBar setBackgroundImage:[UIImage new]
                                              forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.navigationBar.translucent = YES;
self.navigationController.view.backgroundColor = [UIColor clearColor];

问题是,当我'回弹'到我的根视图控制器时,它的导航栏现在也是透明的,我不希望这样。我需要一种方法来只定制特定视图控制器中的导航栏,而不会完全搞砸其他视图控制器。

注意:UIAppearance whenContainedIn将无法正常工作,并且目前在viewDidLoad中设置了样式。

2 个答案:

答案 0 :(得分:0)

您可以在viewWillAppear中应用新样式,并在viewWillDisappearviewDidDisappearviewDidUnload'中恢复旧样式或默认样式,以适合您的应用。

答案 1 :(得分:0)

我想在你的情况下你可以使用方法appearanceWhenContainedIn  UIApparence协议。

这将允许每个容器控制UINavigationBar外观。