iOS 7中忽略了Bar按钮项的色调颜色

4
我正在开发一个iOS 6应用程序,需要与iOS 7兼容。我使用UIAppearance来设置应用程序的某些组件的色调颜色,特别是UINavigationBar及其Bar按钮项。
问题在于,当我在iOS 7设备上部署应用程序时,Bar按钮项的色调颜色会修改为导航栏的颜色。我了解到iOS 7的UIAppearance在这方面(UINavigationBar)有一些修改,如果我想在iOS 7上正确使用它,则应设置barTintColor属性,但由于我希望保持我的应用程序为iOS 6,并且在Xcode 4.6.3中使用SDK 6进行编译,因此我无法使用该属性。
我尝试了许多方法,在某些情况下可行,但仍然无法在整个应用程序中正常工作。有什么想法吗?
这里是我遇到的问题的截图。
编辑1
为了设置应用程序的样式,我在AppDelegate中添加了以下代码:
[[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0]];
[[UIBarButtonItem appearance] setTintColor:[UIColor colorWithRed:230.0/255.0 green:0.0/255.0 blue:0.0/255.0 alpha:1.0]];

编辑2

我尝试使用Xcode 5和SDK 7以及部署目标5来部署应用程序,但是当我在iOS 7设备上部署它时,它将我的UI更改为iOS 7。 这不是识别应用程序何时在iOS 7中运行的问题,因为我不希望应用程序看起来像iOS 7,我希望它看起来与iOS 6中的样子相同。

提前致谢!


你使用什么代码? - Ilario
你不想在iOS 7上让你的应用程序看起来像iOS 6应用程序。这会让你的应用程序显得陈旧和写得很差;你的用户会讨厌使用你的应用程序并留下差评。更好的做法是花时间把UI在两个版本上都做好。 - Simon
谢谢Simon!我知道这一点,但是我的现状要求我将其作为iOS 6应用程序运行。 - mikywan
@mikywan 我也遇到了同样的问题,你最终找到解决方案了吗?谢谢 - laucel
1
@laucel 看起来这是一个bug。 解决方案如下: 1)直接设置UIBarButtonItem的tintColor,但稍后在viewDidLoad之后进行(我使用viewDidAppear)。 2)开始使用iOS 7.0 SDK和Xcode 5.0.x链接您的应用程序。将来,与iOS 7链接将成为App Store的要求。 - mikywan
谢谢@mikywan,我将在未来尝试解决方案1)和2)。 - laucel
3个回答

2
您不需要仅使用iOS 6 SDK才能使您的应用程序在iOS 6上运行。最低版本可以通过在“通用”选项卡的“部署信息”下设置“部署目标”来确定。如果您将其设置为iOS 6,但在“构建设置”选项卡下将“基本SDK”设置为“最新的iOS”,则可以编写可在任何版本上运行的应用程序。
完成此操作后,您需要在运行时检查所需功能是否可用。因此,您可能会执行以下操作:
UIColor *navigationBarColor = [UIColor redColor];
if ([self.navigationBar respondsToSelector:@selector(setBarTintColor:)])
{
    self.navigationBar.barTintColor = navigationBarColor;
}
else
{
    self.navigationBar.tintColor = navigationBarColor;
}

谢谢Simon。我在Xcode 5中打开了我的项目,使用SDK 7和部署目标5,但是当我在iOS 7设备上部署它时,它将我的UI更改为iOS 7。 - mikywan
1
是的,它可以做到。你不想让你的应用在iOS 7上看起来像一个iOS 6应用程序;你的用户会讨厌它。 - Simon

0

你可以在运行时确定是否运行iOS 6或7,并在此时引入特定于操作系统的用户界面调整。

检查iOS 7或更早版本的最佳方法

具体来说,要检查iOS 7或更高版本:

#define IS_OS_7_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)

然后你可以检查:

if (IS_OS_7_OR_LATER) {
    // iOS 7 tweaks
} else {
    // iOS 6 tweaks
}

1
我理解你的意思,但是为了使用iOS 7的新功能,我需要使用SDK 7编译应用程序,这样做后,应用程序看起来就像iOS 7一样。 - mikywan
正确 - 您的应用程序应该看起来像在运行iOS 7的设备上的iOS 7一样。当您使用SDK 7.0编译它时,它仍将在运行iOS 6的设备上运行,并且在该设备上看起来像iOS 6。 - Craig Otis
2
@mikywan - 你找到这个问题的解决方法了吗?我也有同样的问题,目前无法使用SDK 7进行链接。 - Moshe Gottlieb
1
@iMoses 没有,我在一周前向苹果报告了这个Bug,正在等待他们的答复。 - mikywan

0
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 
{


}

谢谢shalunv,我不认为这样做会行,请查看我的第二次编辑。 - mikywan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接