【问题标题】:Correct behaviour? - iPhone app running on iPad loads xib with ~ipad extension正确的行为? - 在 iPad 上运行的 iPhone 应用程序加载带有 ~ipad 扩展名的 xib
【发布时间】:2012-05-19 00:21:30
【问题描述】:

我偶然发现了我认为 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 的应用程序),所以我需要支持所有场景,因此需要使用设备修饰符。

【问题讨论】:

  • 我可以确认这种行为。我将我的 *~ipad.xib 重命名为 *-ipad.xib 并使用 [UIDevice currentDevice].userInterfaceIdiom 在代码中选择适当的 xib 文件

标签: ios xcode ipad interface-builder xib


【解决方案1】:

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

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

【讨论】:

  • 我也认为你复制了一个 iPhone 笔尖,而它应该是一个 iPad 笔尖。尝试创建一个 iPad 项目,然后将 nib 从该项目复制到您的 iPhone 项目,而不是复制 iPhone 项目的 nib。
猜你喜欢
  • 1970-01-01
  • 2014-12-04
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多