如何调整UINavigationBar tintColor以补偿iOS6中的新渐变效果?

问题描述:

在我的应用程序中,我将导航栏设为深蓝色。
iOS6中的新渐变效果导致导航栏显得更轻(请参阅下文)。如何调整UINavigationBar tintColor以补偿iOS6中的新渐变效果?

UINavBar tints in iOS5 and iOS6

如果我调整颜色更暗,以补偿iOS6的,它会出现在iOS5中过暗。

什么使他们看起来相同(或几乎相同)的最佳方式是什么?

检测操作系统版本并设置不同的色调颜色?使用背景图片?或者是否有可用于更改渐变行为的样式设置?

+0

同样这也是一个问题。有或没有,它不会匹配较旧的操作系统。 – Cadin

您可以实现此目的的一种方法是使用背景图像并使用iOS 5.0中引入的外观代理进行设置。

如果您创建的图像是一个很薄的垂直切片(例如宽度为1px,高度为44px,并且视网膜图像翻倍)并将其添加到您的包中,则可以将导航栏背景图像设置为全部在您的应用中使用以下方法导航栏:

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBarImage"] forBarMetrics:UIBarMetricsDefault]; 

如果您在应用启动时运行该代码行,例如在你的appDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

以下方法然后每在的导航栏应用程序将看起来相同。使用像这样的图像的优点是,无论操作系统版本和未来可能会或可能不会出现的任何更改,您的应用程序总是看起来一样。

请注意外观代理API仅在iOS 5.0中添加,因此它不适用于旧版本的iOS。对于外观代理的一个很好的概述,我建议看WWDC 2011视频会话114

+0

感谢您的详细解答。背景图像可能是保持完全相同外观的最佳方式。我很惊讶tintColor的外观变化如此激烈。我想也许我错过了一些东西。我最终只是简单地解决了这个问题,并且稍微重新设计了UI,以适应两种版本。 – Cadin

我有这个问题为好,并采取了色调的颜色,而不是做这个固定:

navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent; 
navigationController.navigationBar.backgroundColor = [UIColor blackColor]; 

请注意,这意味着您必须更改用户界面/ xib文件,因为您已将样式更改为黑色半透明 - 我必须将所有内容都推下44点。现在

,如果你想在你的默认启动图像导航栏导航栏应该看看的iOS 5和iOS 6