【问题标题】:What's the best way to handle landscape/portrait differences in IB?在 IB 中处理横向/纵向差异的最佳方法是什么?
【发布时间】:2010-09-16 04:11:09
【问题描述】:

我有一个支持横向和纵向查看的视图,当您从一个切换到另一个时,所有控件都会四处移动。我目前正在通过在用户旋转手机时设置每个控件的 .center 来做到这一点。问题是这很乏味,需要大量代码,而且似乎违背了使用 Interface Builder 的初衷。

我的问题是:Interface Builder 中有没有一种方法可以让一个视图支持多种外观(一种用于横向,一种用于纵向)?如果不是,其他人如何使用 IB 做到这一点?您是否设置了 2 个视图?

编辑:只是为了澄清我的横向和纵向视图看起来不同,我不想要直接变换,我实际上在横向模式下以不同方式显示数据

【问题讨论】:

    标签: iphone cocoa-touch interface-builder


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我不能 100% 确定这是否可能,但您是否考虑过为横向和纵向使用不同的视图控制器?

      【讨论】:

      • @Colin:这将如何运作?在轮换时,我必须删除一个并添加另一个,我认为这会在屏幕刷新时做一些奇怪的事情......这也意味着我必须设置一些公共父类并尝试让它们共享代码...可能会变得非常混乱
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        在 IB 中一个视图可以支持多个方向的唯一方法是将组件的自动调整大小掩码设置为缩放和/或锚定到边缘。要为每个方向设计完全不同的布局,您需要分别设计纵向和横向视图(各自在自己的 XIB 中)并以编程方式在它们之间切换。

        【讨论】:

          猜你喜欢
          • 2012-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-29
          • 1970-01-01
          • 1970-01-01
          • 2021-02-22
          • 1970-01-01
          相关资源
          最近更新 更多