UINavigationBar 自定义背景图像应用于一个视图控制器,然后影响应用程序中的每个视图控制器
Posted
技术标签:
【中文标题】UINavigationBar 自定义背景图像应用于一个视图控制器,然后影响应用程序中的每个视图控制器【英文标题】:UINavigationBar custom background image applied in one view controller and then affecting every single view controller in the app 【发布时间】: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 中的默认值?
提前致谢!
【问题讨论】:
【参考方案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]
【讨论】:
以上是关于UINavigationBar 自定义背景图像应用于一个视图控制器,然后影响应用程序中的每个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
iPhone - 如何使用我的纹理背景自定义 UINavigationBar 后退按钮
UINavigationBar 自定义背景与悬垂(iOS 5)
自定义 UINavigationBar 背景适用于除一个之外的所有导航控制器
UINavigationBar 和新的 iOS 5+ 外观 API - 如何提供两个背景图像?