新款iPad Pro具有不同的尺寸和分辨率。如果我根據屏幕寬度檢查它是否正確?我沒有升級到Xcode 7.1,也沒有設備,所以我不能檢查它。這個檢查工作嗎?如何檢查iPad是否爲iPad Pro
if([UIScreen mainScreen].bounds.size.width>1024)
{
// iPad is an iPad Pro
}
新款iPad Pro具有不同的尺寸和分辨率。如果我根據屏幕寬度檢查它是否正確?我沒有升級到Xcode 7.1,也沒有設備,所以我不能檢查它。這個檢查工作嗎?如何檢查iPad是否爲iPad Pro
if([UIScreen mainScreen].bounds.size.width>1024)
{
// iPad is an iPad Pro
}
到目前爲止,這個宏似乎沒有任何問題。
#define IS_IPAD_PRO (MAX([[UIScreen mainScreen]bounds].size.width,[[UIScreen mainScreen] bounds].size.height) > 1024)
按照下面的步驟檢查
if([[[UIDevice currentDevice] name] isEqualToString:@"iPad Pro"])
{
// do your stuff
}
這不會起作用。這是設置中的名稱,用戶可以更改名稱 – Leo
這也不起作用。 – user3182143
如果這不起作用,那麼你可以手動檢查你的屏幕高度和寬度,如[UIScreen mainScreen] .size.height == 2048然後它的ipad專業 –
你可以使用這個
#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");
}
你的答案沒有爲我工作。 – user3182143
什麼是iPad Pro 1024?你是否建議有2個模型? – TahoeWolverine
我相信,最後一行應該是MIN,而不是MAX。 – FreeNickname
試試這個庫:https://github.com/fahrulazmi/UIDeviceHardware
那麼你的代碼應該是:
NSString *platform = [UIDeviceHardware platformString];
if ([platform isEqualToString:@"iPad6,7"] || [platform isEqualToString:@"iPad6,8"]) {
// iPad is an iPad Pro
}
還是這個更強大的庫:https://github.com/InderKumarRathore/DeviceUtil
該解決方案不能爲仿真工作。我想檢查模擬器的設備類型,看起來像你必須檢查屏幕大小。
+(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;
}
如前所述由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}
此代碼已重複發佈,例如在http://stackoverflow.com/a/26962452/1187415。如果您從其他來源複製代碼,請添加原件的鏈接以獲取正確的歸屬。 –
您可以使用此代碼:
#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;
}
你們是在開玩笑嗎?你的複雜答案?
if([UIScreen mainScreen].bounds.size.width >= 1024) {
// iPad pro (or hypothetical/future huge-screened iOS device)
} else {
// not iPad pro
}
如果你只是做了>>符號而不是>符號,它將工作得非常好。
(好的,我知道我不應該對你的徹底的具體答案不屑一顧,當然有時候特定的設備比屏幕尺寸更重要,但對於快速明顯的答案......)
但這會在景觀上失敗。那時對於iPad來說,寬度是1024。 – Gamerlegend
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);
}
在橫向和縱向此宏的工作方式:
#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))
當我在模擬器中進行測試的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
}
你無視設備的方向。 –