0

在我的应用程序中,大多数视图在用于小型设备(例如iPhone纵向)和大型设备(例如iPad全屏)上时都存在主要的UI设计差异。基本架构保持不变,但每个View Controller需要显示一组非常不同的UI元素。如何根据iOS 9中尺寸等级的变化来交换视图控制器?

我可以通过根据大小类安装和卸载元素和自动布局约束来响应Interface Builder中的大小更改,但这样会非常笨重和易碎。

在你们古时(2014年),苹果公司的建议是:

如果你想提出不同的基于设备是否处于纵向或横向相同的数据,这样做的方法是使用两个独立的视图控制器一个视图控制器应该管理主要方向(通常是纵向)中的数据显示,而另一个视图控制器管理以替代方向显示数据。

尽管尺寸等级的出现,这给我的印象仍然是我的特殊设计的最佳解决方案(记住采取规模类和拆分视图,幻灯片式的责任。)

问题1:在什么点我的应用程序应该检测到特征的变化?

问题2 :(假设我已经从故事板加载了一个备用视图控制器)来响应特性变化,我应该如何最佳地转换/呈现备用视图控制器?

我问同样的问题在这里问:Adaptive swapping of View Controllers in response to Size Class Trait changes iOS 9

因为没有人回答了原来的问题。

回答

0

如果你在谈论特质运行期间发生变化,例如旋转设备和iPad的多任务处理,可以中使用viewWillTransitionToSize(见this question示例代码),并调整视图层次(含动画,如果你喜欢)这种方法。只需使用普通视图和视图控制器演示方法来添加/删除所提供的控制器或子控制器及其视图。

如果您在发布时间(iPad vs iPhone)中讨论特质更改,只需为这两个设备创建一个不同的故事板或根视图控制器,并将其设置在您的应用程序代理中。尽管如此,这种方法的缺点是不能为横幅上的大尺寸iPhone提供iPad般的体验。


我想挑战的东西,你说,虽然:

我可以通过安装根据大小等级和卸载元件和自动布局约束在Interface Builder中尺寸的变化做出反应,但这会非常笨重和脆弱。

的Xcode 6和后支持“统一故事板”该文档描述像这样:

故事板可以添加或基于尺寸类视图控制器显示在删除视图和布局限制。与其保持两个单独(但相似)的故事板,您可以为多个尺寸类制作单个故事板。首先,使用通用界面设计故事板,然后根据不同的尺寸类别对其进行定制,使界面适应各种形式的优势。

Xcode 8使设计这些高度自适应的视图变得特别容易。您可以切换到特定尺寸特征的编辑模式,甚至可以预览视图控制器在各种设备上的外观。在继续沿着目前的道路走下去之前,我鼓励你深入了解Xcode 8的改进,如果你还没有看到你是否可以为你的用例制作统一的故事板。

+0

感谢您的回答亚伦。我忘了提一件事。我对iPad的看法与iPhone上的相同观点不共享任何常见的UI元素。它是一个完全不同的观点。 – user3158704

+0

在这种情况下,听起来像统一的故事板不起作用。但它也听起来像它可能是一个令人困惑的应用程序:) –