【问题标题】:Why have 2 storyboards when there is AutoLayout?为什么有自动布局时有 2 个故事板?
【发布时间】:2013-01-08 21:06:23
【问题描述】:

iOS6 有 AutoLayout,这是一个基于约束的布局系统。我想它在某种程度上可以与 Android 灵活的 XML 布局相媲美。

我正在启动一个 iOS6 项目并希望您使用 AutoLayout。这个应用程序将是通用的。它将有一些在 2 个设备系列之间极为相似的视图。 iPad 上的其他视图将是 iPhone 视图中的 2 个或更多控制器。

据我了解,UIViewControllers 可以与其他子 UIViewControllers 一起设置。这意味着在这两种设备中构建通用视图需要两个要素。

所以我的问题是,为什么需要 2 个故事板?我可以看到 iPad 故事板有一些额外的控件等。在两种设备类型之间也存在缩放字体大小和其他变量的问题。任何人都可以就如何在 2 个故事板上不重复视图并有效地使用 AutoLayout 来实现一个好的通用应用程序提供建议吗?

非常感谢。

【问题讨论】:

  • 你不能!你必须同时使用它。
  • 只是因为它是一个更大的设备并不意味着它只是使用相同的用户界面但更大。 iPhone 和 iPad 之间使用设备的整个方式发生了变化。 UI 概念完全不同。

标签: iphone ios objective-c uistoryboard autolayout


【解决方案1】:

iPad UI 往往不是 iPhone UI 的简单放大版。有更多的屏幕空间可供使用,并且有自定义的 iPad 专用界面元素(例如 UISplitViewController)。

如果在您的情况下不同的设备具有非常相似的布局,那么是的,您可以只使用一种带有自动布局的布局,它可以正常工作。但是,在大多数情况下,我建议不要这样做。更清楚的是只有两种布局,一种用于每种设备。

最终决定权在您。也许您可以尝试使用自动布局的单一布局策略,看看您是否遇到任何特定问题。

【讨论】:

  • 我希望我能再次为此 +1。
  • 已经有一段时间了,但我最终得到了一种混合解决方案。我确实有一个 iPad 故事板来创建 iPad 布局。故事板中的一些面板(UIViews)是空白的。如果设置了插座和选项,我有一组 MasteriPadViewController、MasterIPhoneViewControllers 可以巧妙地从另一个故事板加载视图。一些 iPad VC 扩展了 iPhone 并为 UI 添加了额外的功能。这确保了最大的代码重用和最大的 UI 灵活性。 (60Hz 是应用程序的名称。)
  • 我在 iOS 和 Android 上工作。片段和一些 Java 类层次结构的东西为重用东西提供了更多的灵活性。但是,是的,它们确实带有自己的一套额外的复杂性。我认为我的下一个通用应用程序架构会有些不同。
  • 嗨@dineth,如果您觉得我的回答有用,请考虑接受。
【解决方案2】:

根据我的经验,不使用情节提要并以编程方式制作所有内容可能会更容易,但这更多是基于意见。

您的问题有点含糊,但我的意见是按照您提到的那样设置具有自动布局的视图,然后拥有一个使用这些视图的控制器。最终会发生的是,您将在控制器内的视图中拥有视图,这将允许您控制所有布局,同时能够根据设备选择去哪里。

如果你给出一个更具体的例子来运行它可能会有所帮助。不过老实说,这也是我感兴趣的事情,我期待看到其他想法。

【讨论】:

  • 感谢您的回答。我已经完成了几个示例项目来测试实现这样的目标的方法,并且我已经取得了一些不错的成功。我认为这值得一整篇博文——我将在这里写下并发布一个摘要作为答案。我只能加载 1 个故事板。
猜你喜欢
  • 1970-01-01
  • 2013-07-21
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多