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

时间:2015-02-01 07:40:35

标签: ios objective-c iphone ipad swift

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

4 个答案:

答案 0 :(得分:2)

如果该应用程序是在iPad上以模拟器模式运行的iPhone应用程序(如您的示例中的Instagram),则它将具有Phone的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 :(得分:1)

我刚遇到了同样的问题,我提出的唯一解决方案是将键盘的宽度与设备的屏幕宽度进行比较。

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

#![deny(missing_docs)]

//! Hello world example for Rust.

fn main() {
    println!("Hello world!");
}

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

答案 2 :(得分: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
}

答案 3 :(得分:0)

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

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