在我的应用程序中,我将导航栏着色为深蓝色。
iOS6 中新的渐变效果使导航栏看起来更亮(见下文)。
如果我将颜色调整为更暗以补偿 iOS6,在 iOS5 中会显得太暗。
使它们看起来相同(或几乎相同)的最佳方法是什么?
检测操作系统版本并设置不同的色调?使用背景图片?或者是否有我可以用来改变渐变行为的样式设置?
在我的应用程序中,我将导航栏着色为深蓝色。
iOS6 中新的渐变效果使导航栏看起来更亮(见下文)。
如果我将颜色调整为更暗以补偿 iOS6,在 iOS5 中会显得太暗。
使它们看起来相同(或几乎相同)的最佳方法是什么?
检测操作系统版本并设置不同的色调?使用背景图片?或者是否有我可以用来改变渐变行为的样式设置?
实现此目的的一种方法是使用背景图像并使用 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 视频 Session 114。
我也有这个问题,并通过取出色调来解决它,而不是这样做:
navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
navigationController.navigationBar.backgroundColor = [UIColor blackColor];
请注意,这意味着您将不得不更改您的用户界面/xib 文件,因为您将样式更改为黑色半透明 - 我不得不将所有内容推低 44 点。
现在导航栏在 iOS 5 和 iOS 6 中应该是一样的。