ios – 故事板大小类:如何针对不同的设备/大小类实现不同的Segues,ViewControllers,UserFlow?

前端之家收集整理的这篇文章主要介绍了ios – 故事板大小类:如何针对不同的设备/大小类实现不同的Segues,ViewControllers,UserFlow?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
现有的iOS 7应用程序支持iPhone和iPad.目前我正在使用两种不同的故事板进行iPhone和iPad布局,效果很好.现在我尝试使用自适应大小类将其转换为One-Storyboard-Layout.

我的问题是,我的iPhone和iPad布局完全不同.它们不仅为控件使用不同的大小和位置,而且还使用一些完全不同的视图控制器.

两个故事板都使用MMDrawerController作为初始VC.但从那时起控制流程就不同了.虽然iPad Storyboard使用UISplitViewController作为所有其他ViewControllers的基础,但iPhone使用的是UITabBarViewController.

这只是一个区别,但还有其他一些.如何在一个故事板中处理这些差异?为了实现这个目标,我将根据当前的Size Class来定义不同的segue.但据我所知,这是不可能的.

一些新的iOS 8自适应Segues的行为可能会有所不同,具体取决于Size Class,但据我所知,不可能为不同的Size Classes指定不同的segue.此外,根据Size Class,无法定义不同的初始ViewControllers.

所以问题是:是否可以在一个故事板中指定两个不同的布局(包括不同的Segues,ViewControllers等)?

切换到单个Storyboard的原因是支持iOS 9中的新分屏和幻灯片功能.在启动时根据屏幕大小/大小类加载不同的故事板很容易.但是,当动态更改大小类时,无法在运行时切换到另一个Storyboard.是吗?

解决方法

我刚刚经历了类似的痛苦,并发现处理更大差异的唯一真正方法是在故事板中正常创建单独的控制器和segue,但是在代码中执行它们而不是依赖于在storyboard中创建的segue激活.

在我的情况下,我在iPhone和iPad上使用侧面菜单,但在iPad上使用拆分视图控制器作为主显示器而不是iPhone上的UINavigationController.另外一个复杂的问题是,在iOS8上,UISplitViewController在iPhone上受支持,但在iOS7上则不受支持,因为它被视为UINavigationController.

据我所知,你不能使用size类自动触发正确类型的segue.但是,只要您有一个进行选择的机制,您就可以在代码中执行此操作.因此,您仍然可以为每个大小的类创建segue,或者更好地为给定的设备类型创建显示模式,并从代码调用正确的.

你最大的问题将是iOS9分屏,它似乎可以动态地将尺寸级别从iPad regularW / regularH改为iPad compactW / regularH,然后再滑动.您可以选择拆分视图,只需切换到导航控制器堆栈即可.我可以看到没有办法切换到标签栏,除非你弹回根,让app委托切换根屏幕并导航回到同一个地方.在这种情况下,很大程度上取决于您想要看到的内容.

最后,我在故事板中的一般经验法则是:

0)在App委托中,计算设备类型并将根屏幕设置为正确的故事板控制器入口点:例如在ipad上拆分视图,在iPhone上的选项卡视图.将一些方法/属性添加到app委托以便任何控制器访问以找出当前运行模式是很方便的.当你需要决定开火时,这将使生活更轻松.

1)根据需要创建单独的控制器,并始终使用任意/任何大小的类设计视图来创建大部分设计.我开始使用不同的设计视图,但发现管理起来太棘手了.特别是因为一些控制器可能出现在弹出窗口上,其中iPad上的尺寸等级(紧凑宽度)与主屏幕上的尺寸等级(常规宽度)不同.

2)根据需要对各个约束,字体等使用大小等级调整.

3)对于可能出现在弹出窗口中的任何视图控制器,在它之前加上带有故事板ID的UINavigationController,该故事板可以用作任何弹出框的根.

4)对于UISplitViewControllers使用showDetail样式segues正常创建.

5)对于在分割视图控制器中用作详细视图的UIViewControllers,但是当在弹出窗口或iOS7上的iPhone上使用时也可能需要将其推入,从其各自的主细节控制器创建推送segue.如果您通过弹出窗口在拆分视图中设置的每个当前内容,或者在iPhone上没有拆分视图的iOS7上,您只需要这个.

6)在控制器之间创建segue,包括iPad / iPhone特定的segues.如果只有一个可能的segue,您可以使用storyboard激活.否则只需在控制器本身之间绘制segue.

7)对于按钮或单元格触发segues的任何控制器,您可以添加目标操作而不是segue触发器.在这些操作中,您将手动调用相应的segue.

8)在每个视图控制器中,目标控制器类型取决于显示模式的类型,编写代码,使用您的app委托运行模式属性来决定使用哪个segue,然后使用segue的标识符调用peformSegueWithIdentifier.

不是这个特别漂亮,但它似乎是一个必要的邪恶,特别是如果你使用拆分视图控制器和弹出窗口.好处是你至少可以在一个地方看到一切.

猜你在找的iOS相关文章