我正在将硬编码布局转换为Xcode 6中可用的新通用故事板系统。通过自动布局的神奇魔力,可以创建一个故事板,适用于iPhone和iPad,这真是太棒了。我的理解是,通用故事板与iOS 7向后兼容。
但是,我在使用弹出窗口过渡时遇到了问题。在iOS 8上,“呈现为弹出窗口”过渡会在iPad界面上显示为弹出窗口,在iPhone界面上显示为模态视图控制器。这恰好是我想要的行为,但是当我在iOS 7上运行我的通用故事板时,每当我尝试弹出窗口过渡时应用程序就会崩溃。以下是我收到的错误消息:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'-[UIPopoverController initWithContentViewController:] called when not
running under UIUserInterfaceIdiomPad.'
这有点烦人,因为我不想为每个UI习惯单独使用故事板。
看起来我的选择是:
- 创建
UIStoryboardSegue
的子类,它将在iPad上显示弹出窗口,在iPhone上显示模态视图。这需要手动更改应用程序中所有弹出窗口segue的类。 - 对于每个导航栏按钮项、表格单元格等,创建两个segue - 一个纯粹的“Popover”segue和一个纯粹的“Modal”segue。在这种情况下,我将无法直接控制拖动到下一个屏幕,而必须创建自定义操作方法,根据当前的UI习惯调用正确的segue。
- 放弃通用故事板并创建设备特定的故事板,直到我可以要求我的用户使用iOS 8。
这些都不是很好的替代方案,所以我想知道:我有其他选择吗?我是否忽略了任何与我的解决方案相关的问题?