UINavigationBar自定义背景图像应用于一个视图控制器,然后影响应用程序中的每个视图控制器

时间:2014-03-18 12:33:48

标签: ios iphone uinavigationbar uiappearance

我正在使用我的应用中的主题。每个主题都带有一个自定义导航栏。默认情况下,我在AppDelegate中应用了自定义导航栏:

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
UIImage *navBackgroundImage = [UIImage imageNamed:@"purplynav.png"];
[[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];

如果我在我的应用程序和viewWillAppear中转到特定的表视图控制器,我会说:

if ([self.selectedTheme isEqualToString:@"Blur"])
{
    UIImage *navBackgroundImage = [UIImage imageNamed:@"pastelpinknav.png"];
    [[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];
}

“pastelpinknav”突然应用于我的应用中的每个导航栏,即使我只是在这个表视图控制器中设置它。

如何设置它以使导航栏在设置时仅应用于此一个视图控制器,但在未设置主题时仍在App Delegate中设置为默认值?

提前致谢!

3 个答案:

答案 0 :(得分:3)

您必须再次更改viewWillDisappear

中的导航栏图像
UIImage *navBackgroundImage = [UIImage imageNamed:@"purplynav.png"];
[[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];

由于您使用的是[UINavigationBar appearance],因此通常会更改UINavigationBar外观。

答案 1 :(得分:1)

从您的视图控制器调用:

[[UINavigationBar appearanceWhenContainedIn:[self class], nil] setBackgroundImage:navBackgroundImage
                                                                    forBarMetrics:UIBarMetricsDefault];

<强> Explenation:

这将改变整个应用程序的foo颜色:

[[UINavigationBar appearance] setFooColor:@"blue"]

为了更改特定容器(即视图控制器)的外观,您需要实现UIAppearanceContainer然后调用(UIViewController已经实现它):

[UINavigationBar appearanceWhenContainedIn:(Class<UIAppearanceContainer>), ..., nil]

答案 2 :(得分:0)

您需要为每个UIViewController设置为None以下

enter image description here

然后,您可以使用每个ViewControllers。