检查应用是否是在iPad上打开的iPhone应用

3

我已经为iOS 8开发了键盘。根据设备是iPhone还是iPad,我加载不同的布局。现在,我遇到了一个问题,当用户打开iPhone应用程序(例如:Instagram)时,在iPad上下载该应用程序并且当然iPad调整此应用程序大小。我的键盘将设备检测为iPad,并加载iPad的布局,但是由于该应用程序不是iPad应用程序,因此加载的键盘布局不适用于它。简而言之,有没有一种编程方法可以检查应用程序是否是由iPad调整大小的iPhone应用程序?这样我就可以为其加载适当的键盘布局。


您的问题标题和描述不匹配。 - user4485063
4个回答

2

如果这个应用是iPhone应用(比如你举的Instagram例子)在iPad上以模拟器模式运行,它将会有一个表示手机的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
}

希望这对您的自定义键盘有所帮助。

1
不幸的是,这似乎不再起作用了。在iPad Air2上运行iOS9.3的iPhone应用进行测试。UI_USER_INTERFACE_IDIOM的结果始终为UIUserInterfaceIdiomPad。 - Simo

2

我刚遇到了完全相同的问题,唯一想到的解决方法是比较我的键盘宽度和设备屏幕宽度。

由于所有自定义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.")
}

虽然不是最优雅的解决方案,但现在它可以工作。


1
如果您的问题涉及任何通用应用程序,则答案是否定的。您的键盘应用程序无法确定安装的应用程序是基于iPhone还是iPad。
如果两个应用程序的开发者相同,则可以通过clientUrl共享一些特定的值。

很遗憾。也许可以通过屏幕宽度或分辨率来检测它?当iPad调整iPhone应用程序大小时,希望宽度和高度会有所不同。 - Amidos
你应该考虑到,即使存在这种情况,你的键盘应用程序也不会收到有关它的通知。:( https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html#//apple_ref/doc/uid/TP40014214-CH16-SW3 - bllakjakk

0
#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。我需要一个特殊情况,以便检测在iPad上打开的应用程序是否为iPhone应用程序。 - Amidos
3
你没有理解这个问题。 - user523234

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接