1

我目前有一个 iOS iPhone 应用程序。

我想做的是让它通用,这样我也可以瞄准 iPad。

我所做的是转到目标并将 iOS 应用程序目标从 iPhone 更改为通用。

现在,当我在 iPad 上运行应用程序时,它会自动调整 iPad 的所有视图的大小。

但是有一些观点,背景图片看起来不太好,因为我需要使用更高分辨率的图片,或者一般我应该在 iPad 版本中更改一些东西。

iPad .nib 文件在哪里???我的意思是,我只看到 iPhone 的。当我在我的 iphone 上运行它时,会使用这些文件。当我在我的 iPad 上运行它时,一切都正确调整了大小,但是这些 .nib 文件到底在哪里?

我阅读的教程(相当旧)建议,当您也以 iPad 为目标时,应该为 ipad 创建新的 .nib 文件。为什么我看不到这些文件?

4

3 回答 3

2

您可以让 iOS 根据扩展自动加载正确的 xib,类似于 Retina 图形的工作方式。如果您的 xib 命名为Awesome,并且您想将其转换为具有 iPhoneiPad 版本(而不是共享,重命名它:

iPhone版本:

Awesome~iphone

iPad版:

Awesome~ipad

然后,当你告诉 iOS 加载时Awesome,它会根据当前平台自动选择加载哪一个。您的代码中不需要if语句!如果你愿意,你仍然可以,但这不是必需的。

注意:您可能需要在重命名后执行清理!有时某些文件在重命名时会保留在构建中。

于 2013-02-26T18:41:44.627 回答
1

您只需要创建新的 .xib 文件并将它们设置为同一个类,您就可以使用以下条件初始化该 viewController:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
     yourVC = [[YourViewController alloc] initWithNibName:"YourViewController_ipad" andBundle:nil];
}
else
{
    yourVC = [[YourViewController alloc] initWithNibName:"YourViewController" andBundle:nil];
}

只要有可能,您应该尝试使用相同的 .xib,但在很多情况下,这样做是不可能的并且看起来不错,所以您只需再做一次。Xcode 不会自动为您执行此操作。

于 2013-02-26T18:36:26.540 回答
1

假设你有一堂课。我们会调用它Two

以下是构成Two该类的当前文件。

Two.h
Two.m
Two.xib

Two.xib包含UIView适用于 iPhone 的尺寸。为了制作适合 iPad 大小的视图,您应该创建一个新的 XIB 文件(将其命名Two_iPad.xib),将 XIB 连接到Two,调整iPad 的大小,并进行相应的设计UIViewTwo_iPad.xib

创建 的新实例时Two,请执行以下操作。

Two *two;

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    //they are using an iPad

    two = [[Two alloc] initWithNibName:@"Two_iPad" bundle:nil];

} else {
    //they are using an iPhone/iPod Touch

    two = [[Two alloc] initWithNibName:@"Two" bundle:nil];

}

您正在创建Two;的新实例 但是,您正在检查用户拥有的设备,并使用相应的 XIB 文件。

于 2013-02-26T18:38:23.107 回答