我正在使用我的应用中的主题。每个主题都带有一个自定义导航栏。默认情况下,我在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中设置为默认值?
提前致谢!
答案 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
以下
然后,您可以使用每个ViewControllers。