通用故事板?

7
在iOS开发的旧XIB世界中,我能够创建一个视图控制器和一个XIB,并将它们用于iPhone和iPad环境。通过一些代码调整,XIB会重新调整大小并适应不同的尺寸和长宽比。这使我能够减少两个布局随着时间而不同步的风险。
在Storyboards的世界中是否也可以实现相同的功能?默认情况下,Xcode为我的Universal应用程序创建了两个不同的storyboard - 一个用于iPhone,另一个用于iPad。
我如何使用一个Storyboard来适配两种设备?
谢谢!
更新:
Xcode 6中的Size Classes基本上可以实现Universal Storyboards的目标。更多信息请参见此处:

https://developer.apple.com/library/prerelease/ios/documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_6_0.html


1
你可能需要添加一些关于你将使用哪种接口的细节。如果是主从关系,那么你可能会发现使用2个故事板(或完全删除故事板)更容易。 - Wain
它是基于导航控制器的。全屏,不是主/详细信息。 - Axeva
2个回答

7
简而言之......你不能。
在iPhone开发的最后阶段,我使用一个解决方法来创建iPad故事板。您必须找到iPhone故事板,并使用终端复制它,将其命名为Xcode为您创建的iPad故事板的名称。删除旧的空故事板,打开新复制的故事板,将targetRuntime属性更改为"iOS.CocoaTouch.iPad",而不是旧值"iOS.CocoaTouch"。
使用Xcode打开iPad故事板,一切都在那里,但仍需要排列和连接到ViewController(包括连线等)。它不是完美的,但我通常这样做是为了节省一些容易出错的复制粘贴(以及几个小时)。
如果您只想针对iPhone定位应用程序并将其交付给iPad,则可以使用iPhone Xib,您将在右下角获得2x小按钮。
2014年底更新(在Xcode 6 beta发布后)。

Xcode 6现在可以让你定义一个单一的故事板,并通过size classes concept让其适应所有设备。这个解决方案有点令人困惑(特别是如果您熟悉Android环境中如何解决此问题),但我认为它朝着正确的方向迈出了一步。


7
"你不能" [需要引用证据] - Nikolai Ruhe
Xcode 6有通用的Storyboard。抱歉,我没有看到原帖的日期就进行了负评。我无法取消我的投票,所以我会改为点赞。 - jj0b
没问题。谢谢你的点赞,我已经编辑了我的答案。我也在使用Xcode 6,但即使在复杂的情况下,尺寸类别可能会在缺乏可维护性和灵活性方面给我带来麻烦(客户经常改变主意...)。 - elbuild

0

是的,你可以。 在Xcode中,在“常规/部署信息”下,你可以简单地选择相同的故事板。

我有一些应用程序也是这样做的。 它们共享许多视图控制器。 如果你使用自由形式大小,那么你可以在故事板中创建单独的视图控制器和两个不同的segue。

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
       [self performSegueWithIdentifier:@"Open VC" sender:sender];
} else {
       [self performSegueWithIdentifier:@"Open VC iPad" sender:sender];
}

唯一的缺点是,除非您切换到iPad的storyboard,否则您无法直接从storyboard中使用iPad特定控件(如弹出窗口等)。


当您在iPad故事板上同时为iPhone和iPad设计界面时,您可以使用弹出视图、表单视图等功能。 - Rudolf Adamkovič
这很容易规避 - 右键单击Storyboard的iPhone版本,以“源代码”打开,然后将单词“iOS.CocoaTouch”替换为“iOS.CocoaTouch.iPad”,并保存。您的iPhone Storyboard将转换为iPad Storyboard,并且您现在应该能够在两个设备上使用相同的内容以及支持弹出窗口。哦,抱歉,我现在看到已经在被接受的答案中提到了相同的建议 - 我停在了“你不能”的阅读 :-) - strange

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接