TL;DR: iOS文档与Info.plist在哪个方向上(横屏左侧还是右侧)的主页按钮存在分歧。我错过了什么吗?(例如,代码认为自己处于哪个方向和设备实际所处的方向有区别。请参见下面标记为❓的倒数第二个项目。)
当应用在模拟器或设备上运行时,究竟会发生什么呢?以下是我收集到的数据子集。为了方便阅读,我强调了LEFT和RIGHT这些术语。你的大脑可能仍然会爆炸。
需要跟踪三个量:
1. Xcode/plist中说的内容 2. 模拟器菜单项所说的内容[或设备方向] 3. API调用UIDevice.current.orientation所说的内容。
当“General”复选框仅设置为“Landscape LEFT”时:
UIDeviceOrientation
的文档如下:
然而,当我在Xcode中使用“通用”复选框时,Info.plist
文件显示相反的结果:
上述信息清晰地呈现了矛盾之处。我的问题是:我是否遗漏了一些东西,或者应该将其视为工具链/文档/API中长期存在的垃圾?
当应用在模拟器或设备上运行时,究竟会发生什么呢?以下是我收集到的数据子集。为了方便阅读,我强调了LEFT和RIGHT这些术语。你的大脑可能仍然会爆炸。
需要跟踪三个量:
1. Xcode/plist中说的内容 2. 模拟器菜单项所说的内容[或设备方向] 3. API调用UIDevice.current.orientation所说的内容。
当“General”复选框仅设置为“Landscape LEFT”时:
Info.plist
文件中写着“横屏(左 home 按钮)” [与文档不一致]- 模拟器启动
- 屏幕图像正确显示 [即正确的方向]
- Hardware > Orientation 菜单项选中“横屏右侧” [与 Xcode/plist 不一致]
- home 按钮在左侧 [即菜单项和 home 按钮位置的关系符合文档]
UIDevice.current.orientation == .landscapeRIGHT
[与 Xcode 不一致,但与 Simulator 菜单一致]- 选择菜单项 Hardware > Orientation > Landscape LEFT
- 翻转屏幕图像并倒置 [正确行为:不自动旋转图像]
- home 按钮在右侧 [当然]
UIDevice.current.orientation == .landscapeLEFT
[与文档一致/与 Xcode/plist 相反]
- 以 home 按钮在左侧的方式启动 iPhone:
- 正确显示屏幕图像
UIDevice.current.orientation == .landscapeRIGHT
[与文档一致/与 Xcode/plist 相反]
- 将手机旋转 180°
- home 按钮在右侧 [当然]
- ❓
UIDevice.current.orientation == .landscapeRIGHT
[即与应用程序认为正在发生的情况一致,而不是与设备的物理方向一致]
- iPad 的行为与 iPhone 相同
UISupportedInterfaceOrientations
数组有一个值UIInterfaceOrientationLandscapeLeft
。 Xcode和API之间的矛盾仍然存在。 - Andrew DuncanUIDevice.current.beginGeneratingDeviceOrientationNotifications()
。 - Andrew Duncan