iPhone故事板:肖像和风景的不同场景

时间:2012-01-08 12:47:53

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

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

除此之外,我使用的是Tab Bar控制器,我不想显示模态视图。我只想用一个用界面构建器设计的横向视图替换当前的纵向视图,并保留我的标签栏。什么是Storyboard实现“创建备用横向界面”任务的方法?谢谢。

3 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:3)

您可以设置导航控制器和一个主视图。然后,您可以使用模板视图进行纵向和横向布局(另外2个视图)。

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

这样做可以使用混合方法编写一些UI代码并使用Interface Builder。获取两个模板设置后,为每个模板创建一个唯一标识符。您必须编写一些逻辑来处理视图及其子视图。一种递归方法,可根据您选择的模板返回这些集合。

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

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

使用此方法,您仍然可以最大限度地使用界面构建器,并为每个视图布局模板,同时还可以根据需要灵活地编写一些自定义UI代码。仅使用接口构建器有时可能有点限制,并且基于方向编写自定义代码会将您锁定在一些繁琐的工作中。

希望这会有所帮助。

答案 2 :(得分:1)

您可以创建一个包含2个uiviews的xib文件,一个前纵向和一个for landscape。 分配为文件的xib所有者,与故事板中的视图相同的viewcontroller。 在viewDidLoad中加载xib文件,并为纵向或横向添加适当的视图。

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

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