問題一:
今天升級到Xcode 9.0,里面多了iPhone 8,iPhone 8P,iPhone X三款手機模擬器,而且發現最多可以同時運行五個模擬器。但隨之而來的問題也出現了,就是 iPhone X 的屏幕適配問題,這里我就發現了 Navigation 的高度不一樣了,所以先解決這個吧,以后有其他問題,再進行研究。
以前的 iPhone 手機的狀態欄高度是 20 的高度,如今 iPhone X 手機狀態欄的高度是 44 (我自己的計算),但以前寫的宏基本上就不能這樣統一的用了,所以做了一些修改。
// 在程序啟動的時候,判斷手機型號 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if (iPhoneX) { // 如果為 iPhone X 手機時 [SJXSaveService sjx_setObject:@(44 + 44) forKey:@"Nav_Height"]; } else { [SJXSaveService sjx_setObject:@(20 + 44) forKey:@"Nav_Height"]; } }
// 在自己的 .pch 文件中添加 #define iPhoneX (SCREEN_HEIGHT == 812) #define iPhone6P (SCREEN_HEIGHT == 736) #define iPhone6 (SCREEN_HEIGHT == 667) #define iPhone5 (SCREEN_HEIGHT == 568) #define iPhone4 (SCREEN_HEIGHT == 480) /* Nav_Height */ #define Nav_Height [[SJXSaveService sjx_objectForKey:@"Nav_Height"] floatValue]
這樣,在程序中還是可以統一使用之前 Navigation 高度的宏定義了。
問題二:
之前在項目中使用了下面的代碼來獲取網絡狀態:
NSArray *children = [[[app valueForKeyPath:@"statusBar"]valueForKeyPath:@"foregroundView"]subviews];
然而在 iPhone X 手機上運行時,會報錯:
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIStatusBar_Modern 0x7fd59fc072e0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key foregroundView.'
所以只好放棄這種方法,使用 AFNetworking 里的 AFNetworkReachabilityManager 來獲取網絡狀態了。