標籤:tde 低版本 ios 編譯錯誤 不同的 iphone 版本 最新 ios系統
由於app的最新設計字型是ios9之後的平方字型,但app最低支援ios7,so...想在常量設定檔類裡統一適配下字型,如下:
//適配字型,ios9及以上系統使用新字型——平方字型#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0#define kFontSize15 [UIFont fontWithName:@"PingFangSC-Light" size:15.0]#else#define kFontSize15 [UIFont systemFontOfSize:15.0]#endif
在ios8的測試環境下,列印 kFontSize15 為 null,由此可見,上面的宏編譯條件判斷條件不對,__IPHONE_OS_VERSION_MAX_ALLOWED 針對的是編譯器,在不同版本的編譯器xcode裡,宏__IPHONE_OS_VERSION_MAX_ALLOWED 對應不同的版本,xcode8.3裡是這樣的:
#define __IPHONE_OS_VERSION_MAX_ALLOWED __IPHONE_10_3
所以,#if後的判斷條件不對,而這樣的判斷適用於那些第三方服務開發人員,他們需相容高低xcode版本保證最新的api跑在低版本的xcode上不會編譯錯誤。同樣
#ifdef __IPHONE_9_0 與上面一樣,只保證你的代碼在低版本編譯的時候不出錯。
最後,適配寫成這樣:
#define SYSTEM_VERSION ([[UIDevice currentDevice] systemVersion])#define IOS9_OR_LATER (SYSTEM_VERSION.floatValue >= 9.0)#define kFontSize15 IOS9_OR_LATER ? [UIFont fontWithName:@"PingFangSC-Light" size:15.0]:[UIFont systemFontOfSize:15.0]
ios系統判斷某些適配 __IPHONE_OS_VERSION_MAX_ALLOWED