0

我有一个正在开发的通用应用程序。

该应用程序使用 NIB,例如,我有,

ExcitingViewController.xib
ExcitingViewController~iPad.xib

在 iPhone 或 iPad 模拟器上,会自动选择适当的变体(即在 iPad 上选择带有 ~iPad 后缀的变体,无需任何代码更改)。

但是,在真正的 iPad 上,总是使用 iPhone 变体。

我已经看到提到以编程方式选择适当的 NIB,但由于这是在模拟器上自动处理的,我不明白为什么它不能在真正的设备上。

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
    excitingViewController = [[ExcitingViewController alloc] initWithNibName:@"ExcitingViewController" bundle:nil];
}
else
{
    excitingViewController = [[ExcitingViewController alloc] initWithNibName:@"ExcitingViewController~iPad" bundle:nil];
}

关于在真实设备上自动选择 ~iPad 变体的任何提示?

(顺便说一句,模拟器通常完全可靠地表现出正确的行为,因此发现这些差异/错误很烦人)。

4

3 回答 3

0

我在我的项目中所做的是覆盖 initWithNibName/initWithCoder/init 并检查它是否是 iPad,如果是则加载适当的 iPad。

我的 pch 中有一个宏用于 iPad 检查:

// iPad detection
#ifdef UI_USER_INTERFACE_IDIOM
#define IS_IPAD() (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#else
#define IS_IPAD() (false)
#endif

然后我只在需要的代码中使用 IS_IPAD()

于 2012-03-02T00:08:24.747 回答
0

对不起,我迟到了,但你有没有尝试过:

  • 令人兴奋的ViewController~iphone.xib
  • 令人兴奋的ViewController~ipad.xib

这应该与设备无关,所以

[[ExcitingViewController alloc] initWithNibName:@"ExcitingViewController" bundle:nil]

应该在两种设备上都可以工作,而无需检查用户界面习惯用法。

这在Resource Programming Guide中有所涉及。

于 2013-06-22T04:09:23.320 回答
0

好的,答案似乎是您需要以编程方式处理此问题(如问题所示),这似乎是 Apple 错失的机会,但也许还有更多。

于 2012-03-10T11:13:42.023 回答