【问题标题】:iPhone Storyboard: different scene for portrait and landscapeiPhone Storyboard:肖像和风景的不同场景
【发布时间】:2012-02-05 08:25:16
【问题描述】:

如果您在此Apple Developer Page 向下滚动一点,您将找到“创建备用横向界面”部分。那里描述的基本方法是在方向改变时将不同的 NIB 文件呈现为模态视图。我正在使用 Storyboard 功能,所以我没有 NIB。在这种情况下如何加载不同的“场景”?

除此之外,我正在使用标签栏控制器,我不想显示模式视图。我只想用界面生成器设计的横向视图替换当前的纵向视图并保留我的标签栏。实现“创建备用景观界面”任务的情节提要方式是什么?谢谢。

【问题讨论】:

    标签: iphone xcode interface-builder storyboard screen-orientation


    【解决方案1】:

    您可以制作一个包含 2 个 uiview 的 xib 文件,一个用于纵向,一个用于横向。 指定为 xib 的文件所有者,与您在情节提要中拥有的视图相同的视图控制器。 在 viewDidLoad 中加载 xib 文件,并为纵向或横向添加适当的视图。

    因此,如果您有一个包含许多视图控制器的故事板,您可以仅在您有兴趣更改方向的视图控制器中设置两种可能性(纵向或横向视图)。

    我使用了这个解决方案并且工作得很好!

    【讨论】:

      【解决方案2】:

      您可以设置一个导航控制器和一个主视图。然后,您可以将模板视图用于纵向和横向布局(2 个附加视图)。

      您需要在主视图上设置控件并确保每个控件都有唯一的标签。不会使用您的主视图,而是将控件复制到两个模板视图并根据您希望每个视图的外观进行设置。这样做的好处是每个视图都将保留其标签,这成为此实现中非常重要的一部分。

      在编写一些 UI 代码和使用 Interface Builder 时,您会使用一种混合方法。设置两个模板后,为每个模板创建一个唯一标识符。您将不得不编写一些逻辑来处理视图及其子视图。一种基于您选择的模板返回这些集合的递归方法。

      根视图控制器实现中的核心逻辑将需要检查 isPortrait 并且基于此,您将希望根据标识符加载正确的视图。

      尝试这个概念,看看它是否适合你。不使用具有独特控件的两个单独视图(不是具有相同标签的共享方法)的主要好处是您可以保持对原始子视图的访问。您在视图控制器中定义的指向文本字段、标签等的任何实例变量都会继续这样做,无论使用哪个模板视图。这维护了模型、视图、控制器方法,因为数据结构保持不变。

      使用这种方法,您仍然可以最大限度地使用界面构建器,并为每个视图布局模板,同时仍然可以根据需要灵活地编写一些自定义 UI 代码。仅使用界面构建器有时会受到一些限制,并且基于方向编写自定义代码会使您陷入一些乏味的工作。

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        当您将视图控制器添加到情节提要时,它会附带一个视图。称之为容器视图。向容器视图添加两个视图:纵向视图和横向视图。使用尺寸检查器适当地设置纵向视图和横向视图的尺寸。根据您的应用程序的需要,将按钮、更多视图、标签或其他内容添加到纵向和横向视图。然后当方向改变时隐藏一个视图并显示另一个。

        【讨论】:

        • 有趣的方法。会尝试的。谢谢
        • 如果你使用 IBOutlets,那些只能分配给一个视图。
        • @Paranaix 我可能不完全理解您的评论。最初的问题要求横向和纵向模式具有不同的界面。如果您正在为同一个界面寻找不同的布局,那就是另一个问题了。也许你应该提出一个全新的问题。
        • 我正在尝试这样做,但我似乎无法向标准视图控制器添加第二个视图。还有其他需要做的吗?
        • 我如何>>只有故事板允许添加一个嵌入关系。请你帮帮我
        猜你喜欢
        • 2014-07-26
        • 1970-01-01
        • 2016-03-08
        • 2011-09-21
        • 2012-10-07
        • 1970-01-01
        • 1970-01-01
        • 2015-01-08
        • 1970-01-01
        相关资源
        最近更新 更多