在 iOS 14 中锁定屏幕方向
Posted
技术标签:
【中文标题】在 iOS 14 中锁定屏幕方向【英文标题】:Locking screen orientation in iOS 14 【发布时间】:2021-03-07 14:54:41 【问题描述】:我正在更新一个旧的 iPad 应用程序,但我无法阻止 ios 旋转一个只能在纵向模式下查看的控制器。该应用程序有一个UISplitViewController
,但有一次我需要在纵向模式下全屏显示另一个控制器,无论 iPad 之前是纵向还是横向。
我有两个问题:
如果 UI 处于横向模式,纵向视图控制器也会以横向显示 不再阻止旋转,因此即使控制器以正确的方向显示,用户也可以旋转设备documentation 表示所有与旋转相关的方法在 iOS 8 中都已弃用,而 iOS 将在窗口的根视图控制器上调用 viewWillTransitionToSize。因此,我打电话给[window setRootViewController]
来设置我的纵向控制器,实际上iOS 在我的控制器上调用viewWillTransitionToSize
。然而,到那时已经太迟了!我需要在过渡开始之前停止它。
在花了很多时间谷歌搜索和尝试变体之后,我离解决方案还差得远——网上(以及 Stack Overflow 上的这里)上有太多旧东西,很难找到最新信息。
我尝试在viewDidLoad
、viewWillAppear
和viewDidAppear
中设置modalPresentationStyle = UIModalPresentationFullScreen
,然后覆盖preferredInterfaceOrientationForPresentation
。我的覆盖永远不会被调用。
我仍然有旧方法 supportedInterfaceOrientations
、shouldAutorotate
和 shouldAutorotateToInterfaceOrientation
,但它们都没有被调用过。
我尝试在我的应用委托中实现application:supportedInterfaceOrientationsForWindow
,但从未调用过该方法。 (来自this question的答案)
在 iOS 14 上执行此操作的正确方法是什么?我应该使用模态全屏演示吗?或者以某种方式使用 UITraitCollection
的 trait 环境?
【问题讨论】:
【参考方案1】:除非您明确选择退出 iPad 多任务处理,否则您不能以任何方式阻止 iPad 应用程序 采用所有四个旋转位置,而 实际上 采用所有四个旋转位置。
为此,请将 Info.plist 键 UIRequiresFullScreen
设置为 YES
;您可以在编辑应用程序目标时方便地执行此操作,方法是选中“常规”选项卡中的“需要全屏”。
但苹果警告说这个选项将被删除;多任务处理将成为一项要求,因此也需要轮换到任何位置。基本上改变你的愿望会更好。
【讨论】:
谢谢马特,我已经在应用程序目标的常规选项卡中检查了“需要全屏”。它没有效果,但我发现 Info.plist 文件中有 两个 标志:UIRequiresFullScreen
和 UIRequiresFullScreen-ipad
。一旦我在<target>-Info.plist
中将 iPad 标志设置为 yes,它就完美运行了!
同时拥有这两个标志很愚蠢,因为无论如何此设置仅在 iPad 上才有意义。只需删除第二个就足够了。引入第二个标志一直是一个错误。删除它,让第一个完成它的工作。
但是,正如我所说,您最好接受不可避免的事情并让设备旋转。
是的,如果我今天设计这个应用程序,我会这样做 - 但这是一个 2009 年的古老应用程序,我一直在保持活力。如果/当多任务成为强制性时,我意识到我将不得不做更多的返工,但现在我很高兴有一个工作应用程序!【参考方案2】:
我曾针对 Ipad 提出过类似的问题,但由于这个问题而被关闭。 我的 Ipad IOS 14.5 和 VisualStudio2019 解决方案是在 InfoPlist 中添加这些行。 (对于像我这样的初学者:不要打开Manifest Mask,右键单击IOS Header下的“infoPlist”并选择“view Code”。)然后添加这些缺失的行:
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string> <!--For Vertikal-->
<string>UIInterfaceOrientationLandscapeLeft</string> <!--For Horizontal-->
<string>UIInterfaceOrientationLandscapeRight</string> <!--For Horizontal-->
</array>
【讨论】:
以上是关于在 iOS 14 中锁定屏幕方向的主要内容,如果未能解决你的问题,请参考以下文章
Vaadin Touchkit / Web 应用程序 - 锁定移动屏幕方向
Android中Activity运行时屏幕方向与显示方式详解