【发布时间】:2014-12-01 01:07:12
【问题描述】:
我正在从硬编码布局转移到 Xcode 6 中可用的新通用故事板系统。能够创建一个故事板,通过自动布局的魔力,这两者都适用,这真是太好了iPhone 和 iPad。我的理解是通用故事板向后兼容 iOS 7。
但是,我在使用 popover segues 时遇到了问题。在 iOS 8 上,新的“Present as Popover”segue 将在 iPad 界面上显示为弹出框,在 iPhone 界面上显示为模态视图控制器。这正是我想要的行为,但是当我在 iOS 7 上运行我的通用情节提要时,每当我尝试 popover segue 时,应用程序就会崩溃。这是我收到的错误消息:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'-[UIPopoverController initWithContentViewController:] called when not
running under UIUserInterfaceIdiomPad.'
这有点烦人,因为我不想为每个 UI 习惯使用单独的故事板。
看起来这些是我的选择:
- 创建
UIStoryboardSegue的子类,它将在 iPad 上显示弹出框,在 iPhone 上显示模式视图。这需要在我的应用中手动更改所有 popover segues 的类。 - 从每个条形按钮项、表格单元格等中创建两个转场 - 一个是纯“Popover”转场,一个是纯“模态”转场。在这种情况下,我将无法仅控制拖动到下一个屏幕,并且必须创建自定义操作方法,这些方法将根据当前 UI 习惯调用正确的 segue。
- 放弃通用故事板并创建特定于设备的故事板,直到我可以要求我的用户使用 iOS 8。
这些都不是很好的选择,所以我想知道:我还有其他选择吗?我提出的解决方案是否遗漏了任何问题?
【问题讨论】:
-
我遇到了完全相同的问题。目前我正在采用自定义 segue 路线,因为我觉得它最不烦人,但我对此并不满意。
标签: ios ipad storyboard ios-universal-app