iOS横向左对右对错

时间:2019-03-13 19:21:24

标签: ios screen-orientation landscape

TL; DR:iOS文档不同意Info.plist的观点(左右方向的哪一侧有Home键)。我想念什么吗? (例如,代码认为所处的方向与设备知道所处的方向之间存在区别。请参阅倒数第二个要点在下面标记为❓)。

UIDeviceOrientation的文档说

screenshot from docs

但是,当我在Xcode中使用“常规”复选框时,Info.plist文件表示相反

screenshots from Xcode

以上信息清楚地表明了矛盾。我的问题是:我是否缺少某些东西,还是应该将其视为工具链/ docs / API中的持久残cru?


当您在模拟器或设备上运行应用程序时,实际上会发生什么 ?以下是我收集的数据的子集。为了您的阅读方便,我强调了术语“左”和“右”。您的大脑可能仍会爆炸。

要跟踪三个数量:

  • Xcode / plist怎么说
  • “模拟器”菜单项所说的内容[或设备方向]
  • API调用UIDevice.current.orientation怎么说。

将“常规”复选框设置为“仅 ”为“左横向”

  • Info.plist文件中显示“横向(向左移动主页按钮)” [即不同意文档]
  • 模拟器启动
    • 屏幕图像朝上[即正确]
    • 已选中“硬件”>“方向”菜单项“右侧景观” [即不同意Xcode / plist]
    • 带有左侧的主页按钮[即菜单项和主按钮位置之间的关系与文档一致]
  • UIDevice.current.orientation == .landscapeRIGHT [即不同意Xcode,但同意模拟器菜单]
  • 选择菜单项硬件>方向>横向左
    • 将屏幕图像上下翻转[正确的行为:无图像自动旋转]
    • 在右侧放置主页按钮[当然]
    • UIDevice.current.orientation == .landscapeLEFT [与docs /与Xcode / plist一致]
  • 使用左侧的主页按钮启动iPhone:
    • 正确显示屏幕图像
    • UIDevice.current.orientation == .landscapeRIGHT [与docs /与Xcode / plist一致]
  • 将手机旋转180度
    • 在右侧放置主页按钮[当然]
    • UIDevice.current.orientation == .landscapeRIGHT [即它与应用程序认为进行的操作一致,而不与设备的物理方向一致。]
  • iPad的行为与iPhone相同

1 个答案:

答案 0 :(得分:0)

我认为主要是Xcode UI和info.plist之间的矛盾。 Xcode UI显示“ 设备方向”,而info.plist则说“支持的接口方向”。但是据我们所知,这是两回事,所以那里肯定有问题。

假设两者之间的info.plist 获胜,然后使用这些字段(适用于iPhone和iPad)指定受支持的界面方向。即您还可以通过supportedInterfaceOrientations在特定的视图控制器中覆盖相同的选项。

相反,引用的文档页面是关于设备方向的,它对 landscapeLeft 的定义是自己的:右侧的主页按钮。

现在,看着界面方向遮罩docs,没有关于 landscapeLeft 的真正细节,但是旧的Xcode UI屏幕截图显示主页按钮是左边。参见例如来自this SO thread

enter image description here

编辑:界面方向doc page而是详细说明了 landscapeLeft :左侧的主页按钮,如旧的屏幕截图所示。

结论

总而言之,在我看来:

  1. Xcode UI / info.plist与支持的界面方向有关,它具有自己的左右横向定义

  2. 设备方向与左/右横向定义相反