我可以在通用应用程序中制作一个可以在 iPhone 和 iPad UI 之间共享的 XIB/NIB 吗?

Posted

技术标签:

【中文标题】我可以在通用应用程序中制作一个可以在 iPhone 和 iPad UI 之间共享的 XIB/NIB 吗?【英文标题】:Can I make one XIB/NIB that can be shared across iPhone and iPad UIs in a Universal App? 【发布时间】:2013-05-13 15:38:29 【问题描述】:

XIB 是否可以跨平台使用?

EG:我正在创建一个通用应用程序。在创建新的 XIB 时,Xcode 要求我选择一个设备系列。

这部分 UI 将按原样在两个版本的应用中使用,并且设备系列并不真正相关(它是 200x250 像素,可以在两个屏幕上显示)。

如果我为设备系列选择 iPad,这是否意味着在 iPhone 上运行时 xib 对应用程序不可见?

如果没有,我应该注意什么问题?

编辑: 特别是在这个答案中,他们暗示设备系列嵌入在 NIB 本身中,可能使其在“错误”平台上不可见:https://***.com/a/10459556/1461211

【问题讨论】:

【参考方案1】:

是的。但是,当为手机和 iPad 放置单个 XIB 时,布局可能会比较复杂。

如果您使用的是 ios6+,请使用自动布局来创建适用于 iPhone 和 iPad 的完全动态布局。

对于看起来不正确的布局,您可以创建一个 ~iPad 版本的 XIB。所以 iphone XIB 被称为 'DeskNoteDetails.xib' iPad 版本将被命名为 DeskNoteDetails~IPAD.xib' 现在你可以为设备设置完全不同的布局。当应用程序需要加载 DeskNoteDetailViewController 视图时,框架将确定它应该加载常规 XIB 还是 ~IPAD。

因此,如果您只有 1 个 XIB,应用程序将始终为两个设备加载该 1 个 XIB。如果您有 ~IPAD xib,应用程序将为设备加载正确的 XIB。

【讨论】:

你好@johan,它在我的应用程序中不起作用。我已经为 iphone 开发了整个应用程序,我也想为 ipad 制作它,我已经用 NAme~IPAD.xib 创建了 xib,但它对我不起作用,你有任何建议。 什么不起作用?你是如何初始化新的 ViewController 的? @johan,首先感谢回复我,我的 ipad xib 正在加载,但 xcode 6.1 中 ipad 的 xib 上隐藏了子控件【参考方案2】:

我有一个可能的答案,来自资源编程指南(我发誓我在发布问题之前查看了文档!)

"在 iPhone 或 iPod touch 设备上,系统会加载 MyImage~iphone.png 资源文件,而在 iPad 上,它会加载 MyImage~ipad.png 资源文件。如果某个设备特定版本的资源不是找到后,系统回退到寻找具有原始文件名的资源,在前面的示例中,该文件名是名为 MyImage.png 的图像。"

因此,它显示,如果文件名中没有具有设备特定扩展名的文件,它将在两个平台上加载相同的版本。

【讨论】:

以上是关于我可以在通用应用程序中制作一个可以在 iPhone 和 iPad UI 之间共享的 XIB/NIB 吗?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone和iPad的独立坐标系

制作通用 iOS 应用程序应遵循的初始步骤

如何制作以编程方式使用 UISplitViewController 和 UINavigationController 的通用 iPhone / iPad 应用程序?

我需要为所有 iphone 制作应用程序的图像分辨率或大小? [复制]

我可以在 Iphone 中制作图表吗?使用任何框架[重复]

有没有办法可以在 iPhone SDK 上制作叠加视图?