检查设备是否运行iOS 5或更高版本

10

可能是重复问题:
检查 iPhone iOS 版本

iOS 5 中的一个更改是能够覆盖 drawrect 方法。这意味着我需要以不同的方式更改navigationBar和tabBar的外观。我能够使用苹果的新方法:

[[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"navigationBarBackgroundRetro.png"] forBarMetrics:UIBarMetricsDefault];

//I create my TabBar controlelr
tabBarController = [[UITabBarController alloc] init];

// I create the array that will contain all the view controlers
[[UITabBar appearance] setBackgroundImage:
    [UIImage imageNamed:@"navigationBarBackgroundRetroTab.png"]];

[[UITabBar appearance] setSelectionIndicatorImage:
    [UIImage imageNamed:@"tab_select_indicator"]];

我正在开发一个适用于iOS 4.3和5.0的应用程序。然而,iOS 5会忽略我重写的drawrect方法,所以应该运行上面的代码。我该如何检查iOS版本,以便在设备运行iOS 5时使用上述代码?

1个回答

50

以下示例适用于任何版本号。例如:要检测iOS 5而不是7,请在代码中将7替换为5。

AvailabilityInternal.h宏

这将检测您正在构建的SDK:

#ifdef __IPHONE_7_0
  // iOS 7.0
#endif

这会检测到您目标配置的常规选项卡中设置为“部署目标”的版本:

  #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 
    // iOS 7.0 or later
  #else 
    // less than 7
  #endif

NSFoundation版本

BOOL isAtLeastIOS61 = NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_6_1;
BOOL isAtMost61 = NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_6_1;
BOOL is7x = floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1;

如果您⌘点击NSFoundationVersionNumber,则会看到iOS和OSX的版本常量。当前SDK的常量始终不存在。

Core Foundation版本

BOOL atLeastIOS61 = kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_6_1;

就像 NSFoundationVersionNumber 一样,SDK版本也没有提供。

设备系统版本

NSString *version = [[UIDevice currentDevice] systemVersion];

BOOL isAtLeast6 = [version floatValue] >= 6.0;
BOOL isAtLeast7 = [version floatValue] >= 7.0;

另一种方法:

BOOL isAtLeast6 = [version hasPrefix:@"6."];
BOOL isAtLeast7 = [version hasPrefix:@"7."];

另一种方式:

BOOL isAtLeast6 = [version compare:@"6.0" options:NSNumericSearch] != NSOrderedAscending
BOOL isAtLeast7 = [version compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending

如果对于浮点数/字符串转换有疑虑,让大家知道,只要版本相等或更高,以上所有报告都是正确的,适用于任何可能的iOS版本(6.0、6.0.1、6.1等)。


那只是检查用于编译的SDK。它不是运行时检查,也不能按预期工作。 - nschum
如果设备运行的是4.3.2版本,则此答案无效。对于> 4.3的检查,它将返回true。 - Mark Norgren
修复了(至少持续到iOS 6)。我写这个的时候也没想到会出现4.3.3 :) - Jano

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