检测isIpad的更好方法是什么?

时间:2011-05-18 14:47:47

标签: objective-c xcode ios

我有一个通用应用程序,可根据用户使用的设备更改屏幕布局。 它似乎工作得很好,但我有一个用户电话(并发送我的屏幕截图)他的iPhone 4显示他的iPad视图而不是iPhone视图。我无法在我们周围的任何手机上复制它,但我想知道是否有更好的方法来实现这一点,因为iOS 4.3已经问世。

+(BOOL)isIpad{
  return ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad);
}

或者,有没有办法检测屏幕尺寸?我主要使用它来确定表中元素的宽度应该是多少,但如果Apple推出带有视网膜显示屏的iPad 3,那么让应用程序相应地调整所有内容会很不错。
如果应用程序是纵向或横向,也很有用。使它像WPF中的元素一样锚定到边缘。

4 个答案:

答案 0 :(得分:3)

当为通用应用程序加载XIB时,或者你正在做的事情,似乎是唯一的方法:

NSString *xibName = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)?@"SomeView~iPad":@"SomeView";

至于屏幕尺寸,这应该有效:

CGRect screenSize = [[UIScreen mainScreen] bounds];

答案 1 :(得分:1)

这就像一个有着数十亿年历史的人,但是在谷歌中遇到过它,所以我认为我发布了一个记录不完整但非常有用的功能。如果你将~ipad添加到iPad特定笔尖的文件名末尾,它将自动加载那个。与加载图像的@ 2x逻辑相同。所以你的iPhone笔尖将被命名为myview.xib,你的ipad myview~ipad.xib和iOS将在任何需要的地方正确加载ipad版本。花式!

答案 2 :(得分:1)

现在不推荐使用UIUserInterfaceIdiomPad。新方法是使用TraitCollections。它只能在视图上调用。

-(BOOL) isiPad{
    return self.view.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular && self.view.traitCollection.verticalSizeClass == UIUserInterfaceSizeClassRegular;
}

请参阅Apple文档here

答案 3 :(得分:0)

可能它有应用程序的先前版本并且与新版本冲突!

尝试删除旧的并重新安装新的!有用!我已经遇到过这个问题。