【问题标题】:NSLineBreakMode enum and backwards compatibilityNSLineBreakMode 枚举和向后兼容性
【发布时间】:2013-10-29 07:45:22
【问题描述】:

我需要我的应用支持 iOS 5+。由于之前的iOS 6,UILabel 中换行模式的枚举lineBreakMode 的类型为UILineBreakMode,而iOS 6+ 的类型为NSLineBreakMode,应该是最好(或更正确)的检查方法当前运行的iOS版本确定要使用的类型?直接做[[UIDevice currentDevice] systemVersion]之类的事情是正确的,还是有更好的方法?

谢谢!

【问题讨论】:

标签: ios ios5 ios6 uilabel line-breaks


【解决方案1】:

运行时无需检查iOS版本,枚举值相同,从UILineBreakMode移动到NSLineBreakMode时编译代码不会改变

enum {

NSLineBreakByWordWrapping = 0,
   NSLineBreakByCharWrapping,
   NSLineBreakByClipping,
   NSLineBreakByTruncatingHead,
   NSLineBreakByTruncatingTail,
   NSLineBreakByTruncatingMiddle
};
typedef NSUInteger NSLineBreakMode


typedef enum {
   UILineBreakModeWordWrap = 0,
   UILineBreakModeCharacterWrap,
   UILineBreakModeClip,
   UILineBreakModeHeadTruncation,
   UILineBreakModeTailTruncation,
   UILineBreakModeMiddleTruncation,
} UILineBreakMode;

【讨论】:

  • 如果我只设置 UILineBreakMode,我会收到编译器警告,如果我只设置 NSLineBreakMode 并在 iOS 5 上运行,它不会抱怨吗?
  • 不,如果你使用枚举NSLineBreakMode它不会抱怨,它会在iOS5上正常工作。 UILineBreakMode 已被弃用,但您可以安全地使用 NSLineBreakMode。我猜他们决定删除这个重复的枚举并弃用 UI 枚举。
【解决方案2】:

如果您想检查操作系统版本,可以使用以下代码:

+ (NSInteger)OSVersion
{
    static NSUInteger _deviceSystemMajorVersion = -1;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _deviceSystemMajorVersion = [[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."][0] intValue];
    });
    return _deviceSystemMajorVersion;
}

【讨论】:

  • 另一种更直接的检查系统版本的方法是:if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { //put your code here }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多