如果你會看到這篇文章

很有可能你是因為想判斷 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 的解析度解釋的非常清楚,大推

要想徹底搞清楚 iPhone 的解析度是怎麼回事,就看這篇

By admin

Leave a Reply