2015-11-20 18 views
7

Nowy iPad pro ma inny wymiar i rozdzielczość. Czy sprawdzanie na podstawie szerokości ekranu byłoby poprawne? Nie zaktualizowałem Xcode 7.1 ani nie mam urządzenia, więc nie mogę jeszcze tego sprawdzić. Czy ten czek zadziała?Jak sprawdzić, czy iPad jest iPad Pro

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

orientację urządzenia za lekceważenie. –

Odpowiedz

3

Do tej pory makro wydaje się działać bez żadnych problemów.

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

Wykonaj poniższe kroki w celu sprawdzenia

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

To nie zadziała. To jest nazwa w ustawieniach, użytkownik może zmienić nazwę – Leo

+0

To również nie działa. – user3182143

+0

jeśli to nie działa, możesz ręcznie sprawdzić wysokość i szerokość ekranu, na przykład [UIScreen mainScreen] .size.height == 2048, a następnie jego ipad pro –

12

może użyć tego

#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) 

Następnie

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

Twoja odpowiedź nie zadziałała. – user3182143

+0

Co to jest iPad Pro 1024? Sugerujesz, że są 2 modele? – TahoeWolverine

+0

Wierzę, że ostatnia linia powinna być MIN, a nie MAX. – FreeNickname

0

Spróbuj Biblioteka: https://github.com/fahrulazmi/UIDeviceHardware

Następnie kody powinny być:

NSString *platform = [UIDeviceHardware platformString]; 
if ([platform isEqualToString:@"iPad6,7"] || [platform isEqualToString:@"iPad6,8"]) { 
    // iPad is an iPad Pro 
} 

albo to mocniejszy Biblioteka: https://github.com/InderKumarRathore/DeviceUtil

rozwiązanie nie może pracować na symulatorach. Chcę sprawdzić typ urządzenia symulatora, wygląda na to, że trzeba sprawdzić rozmiar ekranu.

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

Jak stwierdził HAS w their answer here, dodać to rozszerzenie w kodzie:

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 
     } 
    } 
} 

a dla sprawdzenia

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

Ten kod został wysłany wielokrotnie, np. w http://stackoverflow.com/a/26962452/1187415. Jeśli kopiujesz kod z innego źródła, dodaj link do oryginału w celu właściwego przypisania. –

0

można użyć tego kodu:

#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

Czy żartujesz z dowcipu? h Twoje złożone odpowiedzi?

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

Jeśli po prostu zrobiłeś znak> = zamiast znaku>, zadziała on cudownie.

(w porządku, wiem, że nie powinno być tak lekceważący swoich dokładne, konkretne odpowiedzi. Z pewnością nie są czasy, że konkretne urządzenie liczy się bardziej niż rozmiar ekranu. Ale za szybką odpowiedź, oczywiste ...!)

+1

Ale to się nie uda w krajobrazie. W tym czasie dla iPada szerokość wynosi 1024. – Gamerlegend

-2

Istnieje błąd dla iPada Pro, który powoduje, że ma on zły useragent do oglądania w sieci w tym momencie. User Agent będzie wyglądać to lubi:

Mozilla/5.0 (iPhone; CPU iPhone OS9_1 jak Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13B143

myślę, że możemy to wykorzystać błąd do wykrywania iPada Pro dla aplikacji działających w trybie zgodności.

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

To makro działa zarówno w orientacji poziomej lub pionowej:

#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

Kiedy testowano w symulatorze w Xcode 8 żadna z tych rozwiązań nie sprawdziło.

Sztuką jest, aby spojrzeć na „nativeBounds” rozmiar Hight inaczej będziecie zachowywać się jak wysokość 1024 w symulatorze

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

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