【问题标题】:How to handle different views for different device orientations?如何处理不同设备方向的不同视图?
【发布时间】:2015-09-16 07:27:34
【问题描述】:

我有一个纵向的子视图(故事板场景):

我想在设备旋转到横向时像这样移动和调整大小:

处理此问题的最佳(或最简单)方法应该是什么? 我正在考虑以下选项:

  1. 创建不同的分隔 xib 文件(一个用于纵向,另一个用于横向),并加载相应的文件?
  2. 当方向改变时旋转 + 平移 + 调整子视图的大小?
  3. 直接创建两个子视图(水平底部和垂直左侧)并根据方向隐藏对应?

我在这种情况下需要帮助,我找不到适合我的解决方案。另外,如果我缺少任何其他选项,我将不胜感激。

提前致谢

编辑:这是一款针对 iOS 7 及更高版本的应用。我没有使用尺寸类功能,只是自动布局。

编辑 2:

  1. 为子视图设置新框架。

这个选项和选项2应该有什么区别?

【问题讨论】:

  • 据我了解,UIPresentationController 类是专门为此设计的。但是,我对它还不够熟悉,无法写出完整的答案。有一些方法可以响应尺寸等级的变化,这就是你在某些设备上所拥有的。苹果目前不鼓励(我认为)根据我认为的除尺寸等级以外的任何东西进行 UI 更改,因此如果您希望在手机上出现这种行为,这可能不是一件容易的事吗?不过我不能肯定地说。
  • @Braains 感谢您的回复,我忘了说我正在为 iOS 7+ 开发,我只是使用自动布局,我没有利用大小类......
  • 我认为有一个更简单的解决方案。您可以使用超级视图将视图绑定到左侧和底部。接下来,获取视图的高度和宽度约束的 IBOutlet。设备旋转时更改值。如果您愿意,您也可以使用动画更新约束。如果您喜欢这个想法,如果您想了解更多信息,请告诉我。

标签: ios uiview storyboard orientation nslayoutconstraint


【解决方案1】:

选项 (2) 将是您的最佳选择。存储两组约束并根据方向安装/卸载它们。 如果您使用的是尺寸等级,您可以在 IB 中完全做到这一点。

(1) 是多余的,(3) 是不必要的。

在纵向模式下,您的子视图具有以下约束:

  • 左右两侧的水平空间限制
  • 底部的垂直空间限制
  • 高度限制

设备旋转到横向后,您将更改约束,以便您的子视图最终得到以下约束:

  • 顶部和底部的垂直空间限制
  • 左侧的水平空间限制
  • 宽度限制

【讨论】:

  • 也谢谢你。轮换后,约束如何受到影响?
  • 他们不受影响。旋转后每个视图的新位置将根据相同的约束进行计算。如果您希望视图在方向更改后具有不同的位置,那么您必须相应地更新您的约束。查看我的更新答案以了解如何
猜你喜欢
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 2012-01-22
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多