正确的行为? - 在iPad上运行的iPhone应用程序使用~ipad扩展程序加载xib

时间:2012-05-10 12:18:31

标签: ios xcode ipad interface-builder xib

我偶然发现了我认为iOS中的一些奇怪行为 - 对StackOverflow的搜索没有发现任何与我的问题完全相同的内容。

基本上,如果你有两个带有设备修饰符的文件(~iphone和~ipad)的.xib文件,并且你在iPad上运行iPhone应用程序(非通用)(即在iPhone模拟器窗口内),它将尝试加载~ipad xib文件而不是~iphone xib。

这是一个错误吗?我希望加载~iphone xib。即使实际的设备是iPad,它也在模仿iPhone,对吧?那么肯定应该加载iPhone界面文件吗?

重现的步骤:

  1. 在XCode中创建一个新的iPhone(非通用)应用程序 - 使用“单一视图”模板。
  2. 将ViewController.xib重命名为ViewController~iphone.xib
  3. 复制并重命名xib,以便您现在拥有ViewController~iphone.xib和ViewController~ipad.xib
  4. 在iPad模拟器(或实际的iPad设备)中运行此iPhone应用程序 - 加载~ipad XIB而不是~iPhone xib。
  5. 有人可以建议我如何解决这个问题吗?它很复杂,因为我的实际XCode项目有多个目标(1.仅限iPhone的应用程序2.仅限iPad的应用程序)所以我需要支持所有场景,因此使用设备修改器。

1 个答案:

答案 0 :(得分:0)

我通常在使用nibs时这样做:

- (id)init
{
    if( [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomiPhone )
    {
        nibNameString = @"mynib-iPhone";
    }
    else
    {
        nibNameString = @"mynib-iPad";
    }
    self = [super initWithnNibName:nibNameString bundle...