2013-10-29 31 views
2

我需要我的應用程序來支持iOS 5+。由於之前iOS 6的UILabel中的換行符模式enum lineBreakMode的類型爲UILineBreakMode,而且它對於iOS 6+而言屬於NSLineBreakMode類型,所以應該以什麼樣的方式檢查當前運行的iOS版本以確定要使用的類型?直接做像[[UIDevice currentDevice] systemVersion]這樣的東西是否正確,還是有更好的方法?NSLineBreakMode enum和向後兼容性

謝謝!

+0

看到這個同樣的問題,[UILineBreakMode Vs的NSLineBreakMode(http://stackoverflow.com/q/12714956/642706)。 –

回答

1

UILineBreakMode移動到NSLineBreakMode

enum { 

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


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

如果我只設置'UILineBreakMode',會得到編譯器警告,如果我只是設置了'NSLineBreakMode'並且我在iOS 5上運行,它會不會抱怨? – AppsDev

+0

不,如果您使用enum'NSLineBreakMode',它不會抱怨,它會在iOS5上正常工作。 'UILineBreakMode'已被棄用,但您可以安全地使用'NSLineBreakMode'。我想他們決定刪除這個重複的枚舉並棄用UI。 – slecorne

0

時,如果你並不需要檢查在運行iOS版本,枚舉值都相同,編譯後的代碼不會改變,你要檢查操作系統版本,你可以使用此代碼:

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

檢查系統版本的另一種更直接的方法是:if(floor(NSFoundationVersionNumber)<= NSFoundationVersionNumber_iOS_6_1){ //將代碼放在這裏 } –