我已经为iOS 8开发了键盘。根据设备是iPhone还是iPad,我加载不同的布局。现在,我遇到了一个问题,当用户打开iPhone应用程序(例如:Instagram)时,在iPad上下载该应用程序并且当然iPad调整此应用程序大小。我的键盘将设备检测为iPad,并加载iPad的布局,但是由于该应用程序不是iPad应用程序,因此加载的键盘布局不适用于它。简而言之,有没有一种编程方法可以检查应用程序是否是由iPad调整大小的iPhone应用程序?这样我就可以为其加载适当的键盘布局。
我已经为iOS 8开发了键盘。根据设备是iPhone还是iPad,我加载不同的布局。现在,我遇到了一个问题,当用户打开iPhone应用程序(例如:Instagram)时,在iPad上下载该应用程序并且当然iPad调整此应用程序大小。我的键盘将设备检测为iPad,并加载iPad的布局,但是由于该应用程序不是iPad应用程序,因此加载的键盘布局不适用于它。简而言之,有没有一种编程方法可以检查应用程序是否是由iPad调整大小的iPhone应用程序?这样我就可以为其加载适当的键盘布局。
如果这个应用是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
}
我刚遇到了完全相同的问题,唯一想到的解决方法是比较我的键盘宽度和设备屏幕宽度。
由于所有自定义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.")
}
虽然不是最优雅的解决方案,但现在它可以工作。
#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
}