【问题标题】:UINavigationBar custom background image applied in one view controller and then affecting every single view controller in the appUINavigationBar 自定义背景图像应用于一个视图控制器,然后影响应用程序中的每个视图控制器
【发布时间】:2014-03-18 12:33:48
【问题描述】:

我正在使用我的应用程序中的主题。每个主题都带有一个自定义导航栏。默认情况下,我在 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”突然被应用到我的应用程序中的每个导航栏,即使我只是在这个 Table View Controller 中设置它。

如何设置导航栏在设置时仅适用于这一视图控制器,但在未设置主题时仍设置为 App Delegate 中的默认值?

提前致谢!

【问题讨论】:

    标签: ios iphone uinavigationbar uiappearance


    【解决方案1】:

    您必须再次更改viewWillDisappear中的navigationBar图像

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

    因为您使用的是[UINavigationBar appearance],所以它通常会更改UINavigationBar 的外观。

    【讨论】:

    • 这就像一个魅力 - 非常感谢 @Erik 非常及时的回复 - 真的很感激!
    • 谢谢@Erik - 虽然答案已被接受,但我只是想问你一个简单的问题。我正在尝试对 viewWillAppear 和 viewDidDisappear 中的标签栏做同样的事情,但标签栏永远不会改变图像。我正在使用 UIImage *tabBackgroundImage = [UIImage imageNamed:@"Purplepinktop.png"]; [[UITabBar 外观] setBackgroundImage:tabBackgroundImage]; - 对吗?
    【解决方案2】:

    从您的视图控制器调用:

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

    解释:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多