【问题标题】:Getting different Frame for RootViewControllers for iOS 7 and iOS 8为 iOS 7 和 iOS 8 获取不同的 RootViewControllers 框架
【发布时间】:2014-12-03 21:06:15
【问题描述】:

您好,我遇到了一个奇怪的问题。我正在向 Window 的 RootViewController 添加一个 UIViewController。 我已将 ViewControllerXIB 的自动调整大小设置为 MaskAll。当我在 iPad 上以横向模式运行 iOS 7 项目时,我得到的屏幕尺寸为 (1024,768)。但是当我在装有 iOS 8 的 iPad 上运行时,我得到的屏幕尺寸为 (768,1024)。我无法弄清楚为什么会这样。由于这个原因,我的 ViewController 的子视图没有以正确的屏幕尺寸加载,因为我将 ViewController 的屏幕尺寸传递给它们。 有人可以帮我解决这个问题吗?

【问题讨论】:

  • stackoverflow.com/questions/24150359/… 这是同样的基本问题。
  • iOS 8 的横向屏幕尺寸报告方式与所有先前版本的 iOS 有所不同。我忘记了这是在哪个 WWDC 视频中提到的,所以我无法将您指向文档。

标签: ios ipad ios7 ios8 xib


【解决方案1】:

但是当我在装有 iOS 8 的 iPad 上运行时,我得到的屏幕尺寸为 (768,1024)。

这是因为在 iOS 7 及之前的版本中,应用旋转涉及对根视图控制器的视图应用旋转变换,而窗口和屏幕仍固定在设备上。但在 iOS 8 中,整个应用程序实际上是旋转的。这是一个重大更改,如果您期望旋转变换,它确实会破坏您现有的代码。另一方面,它也好很多——在 iOS 8 中,旋转意味着屏幕、窗口、根视图控制器的视图都只是改变大小(它们交换它们的高度和宽度)——这意味着如果你的应用程序启动到横向它从一开始就具有正确的尺寸。

如果您在 iOS 8 中需要纯设备坐标,您可以使用新的 UICoordinateSpace 协议 (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UICoordinateSpace_protocol/) 获取它们。

【讨论】:

  • 我应该补充一点,基本上你之前所做的事情一直都是错误的。您不应该查看屏幕大小,而是使用约束定位您的视图。这样,您的界面适应 以适应超级视图可能采用的任何维度。 (观看 WWDC 2014 视频,了解如何让您的应用自适应,以了解有关这一新理念的更多信息...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
相关资源
最近更新 更多