iOS通用应用程序和nibs/xibs

iOS通用应用程序和nibs/xibs,ios,nib,ios-universal-app,Ios,Nib,Ios Universal App,我正在开发一个通用应用程序 该应用程序使用笔尖,我有,例如 ExcitingViewController.xib ExcitingViewController~iPad.xib 在iPhone或iPad模拟器上,会自动选择相应的变体(即,在iPad上选择带有~iPad后缀的变体时,不会更改任何代码) 然而,在真正的iPad上,总是使用iPhone变体 我已经看到有人提到通过编程选择合适的NIB,但由于这是在模拟器上自动处理的,我不明白为什么它不能在真正的设备上 if ([[UIDevice c

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

该应用程序使用笔尖,我有,例如

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变体有什么提示吗


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

我在项目中所做的是用nibName/initWithCoder/init覆盖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()

好的,答案似乎是你需要以编程的方式处理这个问题(如问题所示),这似乎是苹果错失的机会,但可能还有更多。

对不起,我来晚了,但你有没有尝试过这样的方法:

  • 激活ViewController~iphone.xib
  • 激活ViewController~ipad.xib
这应该是设备不可知的,所以

[[ExcitingViewController alloc] initWithNibName:@"ExcitingViewController" bundle:nil]
应该可以在两种设备上工作,而不必检查用户界面习惯用法

这有点像是在书中写的