如果你會看到這篇文章
很有可能你是因為想判斷 iPhone 的不同型號
然後做不同的顯示(字體大小、間距….)
現在讓我告訴你
不要再這麼做了
因為東西南北有的沒有的原因
我落入了「判斷手機型號,然後寫不同的顯示 code」的地獄深淵
好不容易寫完了
交付使用者測試時卻發現「走鐘」現象
奇怪的是在模擬器上顯示一切正常
後來才知道
除了可以設定字體大小之外
iPhone 6/6P 還提供了 Zoom 的功能(註)
(分成一般顯示和 Zoom 顯示)
iPhone 6Plus 開啟 Zoom 模式,就等同 iPhone 6 的顯示方式
iPhone 6 開啟 Zoom 模式,就等同 iPhone 5S 的顯示方式
徹底解決這個問題的辦法
就是「不要用手機型號來決定解析度」
而是「用手機當下的顯示解析度」來決定如何顯示
程式碼如下:
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))
#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)
使用法如下:
if (IS_IPHONE_6P) {
….
}
else if (IS_IPHONE_6) {
…
}
註:這篇文章將 iPhone 的解析度解釋的非常清楚,大推