iPhone故事板:竖屏和横屏的不同场景

26
如果您在此苹果开发者页面中向下滚动一点,您会找到“创建备用横向界面”这一节。那里描述的基本方法是在方向更改时呈现不同的NIB文件作为模态视图。我正在使用Storyboard功能,所以我没有NIB文件。在这种情况下,我该如何加载不同的“场景”?
此外,我正在使用选项卡控制器,我不想显示模态视图。我只想用接口生成器设计的横向视图替换当前的纵向视图,并保留我的选项卡栏。采用Storyboard的方式该如何实现“创建备用横向界面”任务?谢谢。
3个回答

20

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


1
有趣的方法。会尝试一下。谢谢。 - Korbi
5
如果您使用IBOutlets,那么它们只能被分配给一个视图。 - Sebastian Hoffmann
1
@Paranaix,我可能没有完全理解你的评论。原始问题提出了在横向和纵向模式下具有不同界面的要求。如果您正在寻找相同界面的不同布局,则是另一个问题。也许您应该提出一个全新的问题。 - T.J.
1
我该如何将两个视图添加到容器视图中?只有Storyboard允许添加一个嵌入关系。请问你能帮我吗? - wod
我明白该怎么做,但有人能制作一些教程或图片来说明吗?我的问题是如何高效地完成它。据我所见,我需要隐藏一个视图,然后将方向改回来,再次改回去。这正确吗?还是我做错了什么?请。 - WebOrCode
显示剩余8条评论

3
您可以设置一个导航控制器和一个主视图。然后,您可以为纵向和横向布局(另外两个视图)使用模板视图。您需要在主视图上设置控件,并确保每个控件都有唯一的标记。您不会使用主视图,而是将控件复制到两个模板视图中,并根据您希望每个视图的外观设置它们。这样做的好处是每个视图将保留其标记,这成为此实现的非常重要的一部分。
通过这种方法,您使用了一种混合方法,即编写一些UI代码并使用Interface Builder。在设置好两个模板之后,为每个模板创建一个唯一的标识符。您将必须编写一些逻辑来处理视图及其子视图。递归方法返回基于您选择的模板的这些集合。
根视图控制器实现中的核心逻辑将需要检查是否为竖屏,并基于此加载正确的视图。尝试使用此概念并查看它是否适合您。不使用具有唯一控件的两个单独视图(而不是具有相同标记的共享方法)的主要优点是您仍然可以访问原始子视图。无论使用哪个模板视图,您定义在视图控制器中指向文本字段、标签等的任何实例变量都将继续保持。这保持了模型、视图、控制器方法,因为数据结构保持不变。
使用此方法,您仍然可以最大限度地利用Interface Builder,并为每个视图布局模板,同时仍具有编写自定义UI代码的灵活性。仅使用Interface Builder有时可能会有点限制,而基于方向编写自定义代码则会让您陷入一些繁琐的工作中。希望这能帮到您。

1
您可以创建一个包含两个UIView的xib文件,一个用于竖屏,一个用于横屏。 将xib的文件所有者指定为与Storyboard中相同的ViewController视图。 在viewDidLoad中加载xib文件,并添加适当的竖屏或横屏视图。
因此,如果您有许多带有视图控制器的Storyboard,您只能在您想要更改方向的视图控制器中设置两种可能性(竖屏或横屏视图)。
我使用了这个解决方案,效果非常好!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接