【发布时间】:2021-09-17 16:45:46
【问题描述】:
我正在更新一个旧的 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 环境?
【问题讨论】:
标签: ios