【问题标题】:Locking screen orientation in iOS 14在 iOS 14 中锁定屏幕方向
【发布时间】:2021-09-17 16:45:46
【问题描述】:

我正在更新一个旧的 iPad 应用程序,但我无法阻止 iOS 旋转一个只能在纵向模式下查看的控制器。该应用程序有一个UISplitViewController,但有一次我需要在纵向模式下全屏显示另一个控制器,无论 iPad 之前是纵向还是横向。

我有两个问题:

  • 如果 UI 处于横向模式,纵向视图控制器也会以横向显示
  • 不再阻止旋转,因此即使控制器以正确的方向显示,用户也可以旋转设备

documentation 表示所有与旋转相关的方法在 iOS 8 中都已弃用,而 iOS 将在窗口的根视图控制器上调用 viewWillTransitionToSize。因此,我打电话给[window setRootViewController] 来设置我的纵向控制器,实际上iOS 在我的控制器上调用viewWillTransitionToSize。然而,到那时已经太迟了!我需要在过渡开始之前停止它。

在花了很多时间谷歌搜索和尝试变体之后,我离解决方案还差得远——网上(以及 Stack Overflow 上的这里)上有太多旧东西,很难找到最新信息。

我尝试在viewDidLoadviewWillAppearviewDidAppear 中设置modalPresentationStyle = UIModalPresentationFullScreen,然后覆盖preferredInterfaceOrientationForPresentation。我的覆盖永远不会被调用。

我仍然有旧方法 supportedInterfaceOrientationsshouldAutorotateshouldAutorotateToInterfaceOrientation,但它们都没有被调用过。

我尝试在我的应用委托中实现application:supportedInterfaceOrientationsForWindow,但从未调用过该方法。 (来自this question的答案)

在 iOS 14 上执行此操作的正确方法是什么?我应该使用模态全屏演示吗?或者以某种方式使用 UITraitCollection 的 trait 环境?

【问题讨论】:

    标签: ios


    【解决方案1】:

    除非您明确选择退出 iPad 多任务处理,否则您不能以任何方式阻止 iPad 应用程序 采用所有四个旋转位置,而 实际上 采用所有四个旋转位置。

    为此,请将 Info.plistUIRequiresFullScreen 设置为 YES;您可以在编辑应用程序目标时方便地执行此操作,方法是选中“常规”选项卡中的“需要全屏”。

    但苹果警告说这个选项将被删除;多任务处理将成为一项要求,因此也需要轮换到任何位置。基本上改变你的愿望会更好。

    【讨论】:

    • 谢谢马特,我已经在应用程序目标的常规选项卡中检查了“需要全屏”。它没有效果,但我发现 Info.plist 文件中有 两个 标志:UIRequiresFullScreenUIRequiresFullScreen-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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 2019-08-29
      相关资源
      最近更新 更多