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 来获取网络状态了。

原文地址:https://www.cnblogs.com/sjxjjx/p/7562594.html