在IB中处理横屏/竖屏差异的最佳方法是什么?

8
我有一个视图,支持横屏和竖屏查看,并且在切换时所有控件都会移动。目前我是通过在用户旋转手机时设置每个控件的.center来实现这一点。问题在于这很繁琐,需要大量的代码,并且似乎违背了首先使用Interface Builder的初衷。
我的问题是:是否有一种方法在Interface Builder中使一个视图支持多种外观(横屏和竖屏各一种)?如果没有,其他人如何在IB中实现此功能?您会设置2个视图吗?
编辑:只是为了澄清,我的横屏和竖屏视图看起来不同,我不想进行直接的变换,实际上我在横屏模式下以不同的方式显示数据。
4个回答

1

在必要的时候,我会将UIView对象添加到IB中的视图中并使其隐藏。为其提供一个漂亮的背景颜色,以便您可以看到它,并将其发送到后台。然后在需要设置对象框架时使用该视图的框架。如果您有很多这样的视图,您可能考虑改用UILabel,以便您可以在IB中给它一个可见名称。

如果您担心内存问题,只需在ViewDidLoad中删除所有这些额外的UIView,并将它们的框架值存储在成员CGRect中。当然,这仅适用于在旋转时没有任何视图自动调整大小或重新定位的情况下,而在这种情况下,您可能不应该这样做。我会为任何原因调整大小/重新定位而执行此操作,而不仅仅是当屏幕旋转时。


0
在IB中,一个视图支持多个方向的唯一方法是将组件的自动调整掩码设置为缩放和/或锚定到边缘。要为每个方向设计完全不同的布局,您需要分别设计纵向和横向视图(每个都在自己的XIB中),并在程序中进行切换。

0
IB(command 3)中Size Inspector中IBOutlet对象的AutoSize属性提供了一些非常好的选项,用于自动拉伸和定位项目。您可以控制L / R和T / B屏幕位置以及相对宽度和高度。您无法完全控制布局,但大多数基本操作都在那里。

0

我不确定是否可能,但您是否考虑过在横屏和竖屏模式下使用不同的视图控制器?


@Colin:那该怎么实现呢?在轮换时,我将不得不删除一个并添加另一个,这可能会对屏幕刷新产生奇怪的影响……这也意味着我必须设置一些共同的父类,并尝试使它们共享代码……可能会变得非常混乱。 - rustyshelf

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