2015-11-20 123 views
7

新款iPad Pro具有不同的尺寸和分辨率。如果我根據屏幕寬度檢查它是否正確?我沒有升級到Xcode 7.1,也沒有設備,所以我不能檢查它。這個檢查工作嗎?如何檢查iPad是否爲iPad Pro

if([UIScreen mainScreen].bounds.size.width>1024) 
    { 
     // iPad is an iPad Pro 
    } 
+1

你無視設備的方向。 –

回答

3

到目前爲止,這個宏似乎沒有任何問題。

#define IS_IPAD_PRO (MAX([[UIScreen mainScreen]bounds].size.width,[[UIScreen mainScreen] bounds].size.height) > 1024) 
-2

按照下面的步驟檢查

if([[[UIDevice currentDevice] name] isEqualToString:@"iPad Pro"]) 
{ 
    // do your stuff 
} 
+2

這不會起作用。這是設置中的名稱,用戶可以更改名稱 – Leo

+0

這也不起作用。 – user3182143

+0

如果這不起作用,那麼你可以手動檢查你的屏幕高度和寬度,如[UIScreen mainScreen] .size.height == 2048然後它的ipad專業 –

12

你可以使用這個

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width) 
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height) 
#define IS_IPAD_PRO_1366 (IS_IPAD && MAX(SCREEN_WIDTH,SCREEN_HEIGHT) == 1366.0) 
#define IS_IPAD_PRO_1024 (IS_IPAD && MAX(SCREEN_WIDTH,SCREEN_HEIGHT) == 1024.0) 

然後

if (IS_IPAD_PRO_1366) { 
    NSLog(@"It is ipad pro 1366"); 
    } 
+2

你的答案沒有爲我工作。 – user3182143

+0

什麼是iPad Pro 1024?你是否建議有2個模型? – TahoeWolverine

+0

我相信,最後一行應該是MIN,而不是MAX。 – FreeNickname

13
+(BOOL) isIpad_1024 
{ 

    if ([UIScreen mainScreen].bounds.size.height == 1024) { 
     return YES; 
    } 
    return NO; 
} 

+(BOOL) isIpadPro_1366 
{ 

    if ([UIScreen mainScreen].bounds.size.height == 1366) { 
     return YES; 
    } 
    return NO; 
} 
5

如前所述由their answer here了,在代碼中添加此擴展:

public extension UIDevice { 
    var modelName: String { 
     var systemInfo = utsname() 
     uname(&systemInfo) 
     let machineMirror = Mirror(reflecting: systemInfo.machine) 
     let identifier = machineMirror.children.reduce("") { identifier, element in 
      guard let value = element.value as? Int8 where value != 0 else { return identifier } 
      return identifier + String(UnicodeScalar(UInt8(value))) 
     } 

     switch identifier { 
     case "iPod5,1":         return "iPod Touch 5" 
     case "iPod7,1":         return "iPod Touch 6" 
     case "iPhone3,1", "iPhone3,2", "iPhone3,3":  return "iPhone 4" 
     case "iPhone4,1":        return "iPhone 4s" 
     case "iPhone5,1", "iPhone5,2":     return "iPhone 5" 
     case "iPhone5,3", "iPhone5,4":     return "iPhone 5c" 
     case "iPhone6,1", "iPhone6,2":     return "iPhone 5s" 
     case "iPhone7,2":        return "iPhone 6" 
     case "iPhone7,1":        return "iPhone 6 Plus" 
     case "iPhone8,1":        return "iPhone 6s" 
     case "iPhone8,2":        return "iPhone 6s Plus" 
     case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2" 
     case "iPad3,1", "iPad3,2", "iPad3,3":   return "iPad 3" 
     case "iPad3,4", "iPad3,5", "iPad3,6":   return "iPad 4" 
     case "iPad4,1", "iPad4,2", "iPad4,3":   return "iPad Air" 
     case "iPad5,1", "iPad5,3", "iPad5,4":   return "iPad Air 2" 
     case "iPad2,5", "iPad2,6", "iPad2,7":   return "iPad Mini" 
     case "iPad4,4", "iPad4,5", "iPad4,6":   return "iPad Mini 2" 
     case "iPad4,7", "iPad4,8", "iPad4,9":   return "iPad Mini 3" 
     case "iPad5,1", "iPad5,2":      return "iPad Mini 4" 
     case "iPad6,7", "iPad6,8":      return "iPad Pro" 
     case "i386", "x86_64":       return "Simulator" 
     default:          return identifier 
     } 
    } 
} 

而對於檢查

if(UIDevice.currentDevice().modelName == "iPad Pro"){//Your code} 
+4

此代碼已重複發佈,例如在http://stackoverflow.com/a/26962452/1187415。如果您從其他來源複製代碼,請添加原件的鏈接以獲取正確的歸屬。 –

0

您可以使用此代碼:

#include <sys/types.h> 
#include <sys/sysctl.h> 

- (BOOL) isIpadPro{ 
    size_t size; 
    sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
    char *machine = malloc(size); 
    sysctlbyname("hw.machine", machine, &size, NULL, 0); 
    NSString *platform = [NSString stringWithUTF8String:machine]; 
    free(machine); 

    if ([platform isEqualToString:@"iPad6,8"]) 
     return YES; 

    return NO; 
} 
0

你們是在開玩笑嗎?你的複雜答案?

if([UIScreen mainScreen].bounds.size.width >= 1024) { 
    // iPad pro (or hypothetical/future huge-screened iOS device) 
} else { 
    // not iPad pro 
} 

如果你只是做了>>符號而不是>符號,它將工作得非常好。

(好的,我知道我不應該對你的徹底的具體答案不屑一顧,當然有時候特定的設備比屏幕尺寸更重要,但對於快速明顯的答案......)

+1

但這會在景觀上失敗。那時對於iPad來說,寬度是1024。 – Gamerlegend

-2

iPad Pro存在一個bug,使得它目前在webview中有一個錯誤的useragent。 用戶代理看起來喜歡這樣的:

的Mozilla/5.0(iPhone; CPU iPhone OS9_1,例如Mac OS X)爲AppleWebKit/601.1.46(KHTML,例如Gecko)手機/ 13B143

我認爲,我們可以用這個用於檢測運行在兼容模式下的應用程序的iPad Pro的缺陷。

-(BOOL)isiPadPro; 
{ 
    UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectZero]; 
    NSString* userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]; 
    return [userAgent containsString:@"iPhone"] && ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad); 
} 
0

在橫向和縱向此宏的工作方式:

#define IS_IPAD_PRO_12_INCH (([UIScreen mainScreen].bounds.size.width == 1366 && [UIScreen mainScreen].bounds.size.height == 1024) || ([UIScreen mainScreen].bounds.size.width == 1024 && [UIScreen mainScreen].bounds.size.height == 1366)) 
0

當我在模擬器中進行測試的Xcode 8這些解決方案的工作。

訣竅是尋找「nativeBounds」大小HIGHT否則,你將繼續得到1024作爲高度仿真

#define iPadPro12 (UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad && UIScreen.mainScreen.nativeBounds.size.height > 1024) 

if (iPadPro12) 
{ 
    //its ipad Pro 12.9 inch screen 
}