我的iPhone应用程序不是通用的,但它有一个功能,我想为在iPad上玩的人启用。有没有办法在兼容模式下检测到你在iPad上运行?用于检测机器规格的UIDevice方法都返回您在iPhone上获得的值(至少在模拟器上)。我唯一能想到的就是检测OS 3.2,但这种技术不会长久发挥作用。
答案 0 :(得分:20)
最初在这里回答:https://stackoverflow.com/a/14864400/577237
重新发布,因为它太短了:
如果应用程序是在iPad上以模拟器模式运行的iPhone应用程序,它将具有Phone的userInterfaceIdiom,但是具有iPad的型号类型。您可以使用以下代码进行检查:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone &&
[[[UIDevice currentDevice] model] hasPrefix:@"iPad"]) {
// This app is an iPhone app running on an iPad
}
答案 1 :(得分:9)
1)使用Erica Sadun撰写的 UIDevice-Extension 。一个非常全面的课程: http://github.com/erica/uidevice-extension/blob/master/UIDevice-Hardware.m
2)或者您也可以使用 UIDevice 类方法:
[[UIDevice currentDevice] name] // eg. "Brock's iPhone"
[[UIDevice currentDevice] model] // eg. @"iPhone", @"iPod Touch"
[[UIDevice currentDevice] localizedModel] // localized version of model
[[UIDevice currentDevice] systemName] // eg. @"iPhone OS"
[[UIDevice currentDevice] systemVersion] // eg. @"3.2"
[[UIDevice currentDevice] uniqueIdentifier] // UDID, a unique string to identify the device
上述每一行都会返回NSString
。您可以像这样进行字符串比较:
NSString *model = [[UIDevice currentDevice] model];
NSLog(@"Current device model: \"%@\"", model);
3)另一种方式:
http://www.drobnik.com/touch/2009/07/determining-the-hardware-model/ 您需要对其进行修改才能使用适合iPad的硬件编号。取自上面的链接:
的UIDevice-hardware.h
#import
#define IPHONE_1G_NAMESTRING @"iPhone 1G"
#define IPHONE_3G_NAMESTRING @"iPhone 3G"
#define IPHONE_3GS_NAMESTRING @"iPhone 3GS"
#define IPOD_1G_NAMESTRING @"iPod touch 1G"
#define IPOD_2G_NAMESTRING @"iPod touch 2G"
@interface UIDevice (Hardware)
- (NSString *) platform;
- (NSString *) platformString;
@end
的UIDevice-hardware.m
#import "UIDevice-hardware.h"
#include <sys/types.h>
#include <sys/sysctl.h>
@implementation UIDevice (Hardware)
/*
Platforms
iPhone1,1 = iPhone 1G
iPhone1,2 = iPhone 3G
iPhone2,1 = iPhone 3GS
iPod1,1 = iPod touch 1G
iPod2,1 = iPod touch 2G
*/
- (NSString *) platform
{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithCString:machine];
free(machine);
return platform;
}
- (NSString *) platformString
{
NSString *platform = [self platform];
if ([platform isEqualToString:@"iPhone1,1"]) return IPHONE_1G_NAMESTRING;
if ([platform isEqualToString:@"iPhone1,2"]) return IPHONE_3G_NAMESTRING;
if ([platform isEqualToString:@"iPhone2,1"]) return IPHONE_3GS_NAMESTRING;
if ([platform isEqualToString:@"iPod1,1"]) return IPOD_1G_NAMESTRING;
if ([platform isEqualToString:@"iPod2,1"]) return IPOD_2G_NAMESTRING;
return NULL;
}
@end
答案 2 :(得分:3)
您检查过“UIDevice.h”吗?它有模型属性,你可以找到iPhone,iPod,iPad设备
NSString *名称; // 例如“我的iPhone”
NSString *模型; // 例如@“iPhone”,@“iPod Touch”
NSString * localizedModel; // 模型的本地化版本
NSString * systemName; // 例如@“iPhone OS”
NSString * systemVersion; // 例如@ “2.0”
NSString * uniqueIdentifier; (已弃用) // a 基于的每个设备唯一的字符串 各种硬件信息。
答案 3 :(得分:0)
如果您需要知道是否在iPad上运行iPhone应用程序,那么可以将界面缩小到iPhone 4S大小,值得注意的是,在12.9英寸iPad上运行的iPhone应用程序以iPhone SE大小显示。添加对主屏幕比例尺的检查将解决此问题。
var isSmalliPhoneAppRunningOniPad: Bool {
return UIDevice.current.userInterfaceIdiom == .phone &&
UIDevice.current.model.hasPrefix("iPad") &&
UIScreen.main.scale == 2
}