2015-11-20 16 views
7

Chuyên gia iPad mới có kích thước và độ phân giải khác nhau. Nếu tôi kiểm tra dựa trên chiều rộng màn hình nó sẽ là chính xác? Tôi havent nâng cấp lên Xcode 7.1 cũng không làm tôi có thiết bị vì vậy tôi không thể kiểm tra nó được nêu ra. Việc kiểm tra này có hoạt động không?Cách kiểm tra xem iPad có iPad Pro

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

hướng thiết bị coi thường của Bạn. –

Trả lời

3

Cho đến nay macro này dường như thực hiện thủ thuật mà không gặp bất kỳ sự cố nào.

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

Thực hiện theo các bước dưới đây để kiểm tra

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

Điều này sẽ không hoạt động. Đây là tên trong cài đặt, người dùng có thể thay đổi tên – Leo

+0

Điều này cũng không hoạt động. – user3182143

+0

nếu điều này không hoạt động thì bạn có thể kiểm tra chiều cao và chiều rộng màn hình của bạn theo cách thủ công như [màn hình chính UIScreen] .size.height == 2048 rồi màn hình chuyên nghiệp ipad –

12

Bạn có thể sử dụng này

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

Sau đó

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

Câu trả lời của bạn không hoạt động đối với tôi. – user3182143

+0

iPad Pro 1024 là gì? Bạn đang đề xuất có 2 mô hình? – TahoeWolverine

+0

Tôi tin rằng, dòng cuối cùng phải là MIN, chứ không phải MAX. – FreeNickname

0

Hãy thử thư viện này: https://github.com/fahrulazmi/UIDeviceHardware

012.

Sau đó, mã của bạn nên là:

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

Hoặc thư viện mạnh hơn này: https://github.com/InderKumarRathore/DeviceUtil

Các giải pháp không thể làm việc cho mô phỏng. Tôi muốn kiểm tra loại thiết bị mô phỏng, có vẻ như bạn phải kiểm tra kích thước màn hình.

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

Như đã trình bày bởi HAS trong their answer here, thêm phần mở rộng này trong mã của bạn:

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

Và để kiểm tra

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

Mã này đã được đăng nhiều lần, ví dụ: trong http://stackoverflow.com/a/26962452/1187415. Nếu bạn sao chép mã từ một nguồn khác, vui lòng thêm liên kết vào mã gốc để phân bổ phù hợp. –

0

bạn có thể sử dụng mã này:

#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

Các bạn có đùa không h câu trả lời phức tạp của bạn?

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

Nếu bạn vừa làm> = ký thay vì dấu>, nó sẽ hoạt động tuyệt vời.

(được rồi, tôi biết tôi không nên loại bỏ các câu trả lời kỹ lưỡng, cụ thể của bạn. Chắc chắn có những lúc thiết bị cụ thể quan trọng hơn kích thước màn hình. Nhưng để có câu trả lời nhanh, rõ ràng ...!)

+1

Nhưng điều này sẽ thất bại về cảnh quan. Tại thời điểm đó cho iPad, chiều rộng là 1024. – Gamerlegend

-2

Có lỗi cho iPad Pro khiến cho ứng dụng này có lỗi người dùng không thích hợp cho webview vào lúc này. User Agent sẽ xem xét thích này:

Mozilla/5.0 (iPhone; CPU iPhone OS9_1 như Mac OS X) AppleWebKit/601.1.46 (KHTML, như Gecko) Điện thoại di động/13B143

Tôi nghĩ chúng ta có thể sử dụng này lỗi để phát hiện iPad Pro cho các ứng dụng đang chạy trên chế độ tương thích.

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

Macro này hoạt động trong cả hai ngang và dọc:

#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

Khi tôi thử nghiệm trên mô phỏng trong Xcode 8 không ai trong số các giải pháp này làm việc.

Bí quyết là để tìm kiếm "nativeBounds" kích thước Hight nếu không bạn sẽ tiếp tục nhận được 1024 vì chiều cao trong mô phỏng

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

if (iPadPro12) 
{ 
    //its ipad Pro 12.9 inch screen 
} 
Các vấn đề liên quan