UIAppearance为UIPopoverController删除自定义NavBar背景

时间:2012-07-04 18:39:04

标签: objective-c xcode ios5 uipopovercontroller uiappearance

我正在整合iOS 5的UIAppearance功能,为我的通用应用程序提供独特的主题。目前,我已在App Delegate中实现了一些代码,以便为应用程序提供自定义导航栏:

UIImage *navBarImage = [[UIImage imageNamed:@"navigationBar.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(7, 7, 7, 7)];
[[UINavigationBar appearance] setBackgroundImage:navBarImage forBarMetrics:UIBarMetricsDefault];

这很好用,可以将所有导航栏从Apple的简单样式更改为明亮的渐变。但是,我遇到的问题是它覆盖了一些我不想要它的风格。我的特殊问题是它覆盖了iPad的UIPopoverController中的导航栏背景,创造了一种丑陋的用户体验。请告诉我如何解决它。

编辑:请注意,这是一个通用应用程序,我通过iPad上的UIPopoverController和iPhone / iPod上的模态视图打开图像选择器。我只想删除iPad弹出窗口上navBar的自定义背景,而不是模态视图。

目前情况如下: enter image description here

我希望它看起来像: enter image description here

先谢谢你的帮助, Guvvy

1 个答案:

答案 0 :(得分:14)

尝试使用+appearanceWhenContainedIn:方法在弹出控制器中包含导航栏时从导航栏中删除背景图像自定义。像这样:

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

从文档中不清楚是否将导航栏的背景图像设置为nil会恢复其默认外观 - 如果不起作用,则可能需要采取相反的方法,并提供非列表您正在使用的弹出框容器视图控制器+appearanceWhenContainedIn: