iOS 7 中忽略的条形按钮项目着色

Posted

技术标签:

【中文标题】iOS 7 中忽略的条形按钮项目着色【英文标题】:Bar button items tint color ignored in iOS 7 【发布时间】:2013-10-29 12:33:40 【问题描述】:

我正在开发一个需要与 ios 7 兼容的 iOS 6 应用程序。我使用 UIAppearance 来设置应用程序某些组件的色调颜色,特别是 UINavigationBar 及其条形按钮项目。

问题是当我在 iOS 7 设备上部署应用程序时,栏按钮项目的色调颜色被修改为导航栏的颜色。我了解 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

我尝试使用 SDK 7 和部署目标 5 从 Xcode 5 部署应用程序,但是当我将其部署在 iOS 7 设备上时,它会将我的 UI 更改为 iOS 7。这不是识别什么时候的问题该应用程序在 iOS 7 中运行,因为我不希望该应用程序看起来像 iOS 7,我希望它看起来与它在 iOS 6 中的外观相同

提前致谢!

【问题讨论】:

你用什么代码? 您不希望您的应用看起来像 iOS 7 上的 iOS 6 应用。您的应用会显得陈旧且写得不好;您的用户会讨厌使用您的应用程序,并会给您留下不好的评价。更好地把工作放在两个版本的 UI 上。 谢谢西蒙!我知道这一点,但是我现在的情况要求我将其作为 iOS 6 应用程序运行 @mikywan 我也遇到了同样的问题,你最后找到解决方案了吗?谢谢 @laucel 显然这是错误。解决办法是: 1)直接设置UIBarButtonItem的tintColor,但在viewDidLoad之后。 (我使用 viewDidAppear)。 2) 开始将您的应用与 iOS 7.0 SDK 和 Xcode 5.0.x 链接。未来某个时候,与 iOS 7 的链接将成为 App Store 的一项要求。 【参考方案1】:

您无需将自己限制为 iOS 6 SDK 即可让您的应用在 iOS 6 上运行。您的应用将运行的最低版本是使用 General 中 Deployment Info 下的“Deployment Target”设置的标签。如果您将其设置为 iOS 6,但在 Build Settings 选项卡下将“Base SDK”设置为最新 iOS,您将能够编写一个可以在其中任何一个上运行的应用程序。

完成后,您需要在运行时检查您需要的功能是否可用。所以你可能会这样做:

UIColor *navigationBarColor = [UIColor redColor];
if ([self.navigationBar respondsToSelector:@selector(setBarTintColor:)])

    self.navigationBar.barTintColor = navigationBarColor;

else

    self.navigationBar.tintColor = navigationBarColor;

【讨论】:

谢谢西蒙。我在 Xcode 5 中使用 SDK 7 和部署目标 5 打开了我的项目,但是当我将它部署在 iOS 7 设备上时,它会将我的 UI 更改为 iOS 7 是的,会的。您不希望您的应用看起来像 iOS 7 上的 iOS 6 应用;你的用户会讨厌它。【参考方案2】:

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

Best way to check for iOS 7 or earlier

具体来说,检查 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

【讨论】:

我了解 Craig,但为了使用 iOS 7 的新功能,我需要使用 SDK 7 编译应用程序,当我这样做时,应用程序看起来像 iOS 7 正确 - 您的应用在运行 iOS 7 的设备上应该看起来像 iOS 7。当您使用 SDK 7.0 编译它时,它仍将在运行 iOS 6 的设备上运行,并且看起来像 iOS 6那个设备。 @mikywan - 你找到解决这个问题的方法了吗?我有同样的问题,目前无法选择与 SDK 7 链接。 @iMoses 不,我没有,我在一周前向 Apple 报告了这个错误,我正在等待他们的答复。【参考方案3】:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) 




【讨论】:

谢谢 shalunv,我不认为这样可以,请检查我的第二次编辑。

以上是关于iOS 7 中忽略的条形按钮项目着色的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7 中更改条形按钮的颜色

Xcode 7 / iOS 9:在 SKNode 中使用 OpenGL 片段着色器未编译

iOS 7 UI 转换问题:屏幕底部的触摸事件被忽略

为自定义 UITabBarItem 着色

条形按钮项目未在 SWIFT 中显示

条形按钮项目问题