正确的行为?- 在iPad上运行的iPhone应用程序使用~iPad扩展名加载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。

谁能建议我如何解决这个问题? 这很复杂,因为我的实际 XCode 项目有多个目标(1. 仅限 iPhone 的应用程序 2. 仅限 iPad 的应用程序(,所以我需要支持所有场景,因此使用设备修饰符。

我通常在使用笔尖时这样做:

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

最新更新