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 來獲取網絡狀態了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM