检查应用程序是否 iPhone 应用程序在 iPad 打开

Check if app is iPhone app opened on iPad

我为 iOS 开发了键盘 8. 根据设备是 iPhone 还是 iPad 我加载不同的布局。现在,当用户打开 iPhone 应用程序但在 iPad 上下载并且当然 iPad 调整此应用程序的大小时,我遇到了一个问题。我的键盘将设备检测为 iPad 并加载 iPad 的布局,但由于应用不是 iPad 应用,加载的键盘布局不适合它。很快,有没有办法以编程方式检查应用程序是否 iPhone 应用程序大小调整 iPad?所以我可以为它加载正确的键盘布局。

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

如果您致电:

if(IS_IPHONE) {
    //Device is a iPhone
}
else {
    //Device is a iPAD
}

如果您的问题是关于任何通用应用程序,答案是否定的。 您的键盘应用无法确定已安装的应用是基于 iphone 还是基于 iPad。

如果两个应用的开发者相同,您可以有一些特定的值,可以通过 clientUrl 共享。

如果应用程序是 iPhone 应用程序(如您示例中的 Instagram)运行 在 iPad 上的模拟器模式下,它将具有 [=18= 的 userInterfaceIdiom ],而是iPad的模型类型。您可以使用以下代码进行检查:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone &&
    [[[UIDevice currentDevice] model] hasPrefix:@"iPad"]) {
    // This app is an iPhone app running on an iPad, use iPhone-style layout
}

希望这适用于您的自定义键盘。

我只是 运行 遇到了这个完全相同的问题,我想出的唯一解决方案是将我的键盘宽度与设备的屏幕宽度进行比较。

由于所有自定义 iOS 键盘都会填充其主机应用程序的宽度,这意味着如果键盘宽度小于设备屏幕的宽度,则它必须 运行 一些填充周围的边缘。即键盘显示在 iPhone 应用程序中,该应用程序显示在 iPad

let keyboardWidth = self.keyboardView.frame.size.width
let screenWidth = UIScreen.mainScreen().bounds.size.width

if (keyboardWidth < screenWidth) 
{
    print("The keyboard is being displayed in an iPhone app that is running on an iPad.")
}

这不是最优雅的解决方案,但现在可以使用。