iOS项目之iPhoneX遇到的坑
问题一:
今天升级到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 来获取网络状态了。