OverCurrentContext 防止方向改变

Posted

技术标签:

【中文标题】OverCurrentContext 防止方向改变【英文标题】:OverCurrentContext prevents orientation change 【发布时间】:2019-01-25 06:12:23 【问题描述】:

我在电流UIViewController(我们称之为控制器B)上呈现一个UIViewController(我们称之为控制器A)。我希望控制器 A 以横向显示。当我设置overCurrentContext 时,默认情况下它不会改变方向(我需要向左/向右转动设备),但是,如果我注释overCurrentContext 代码,一切正常。

var landscapeOrientation = false
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask 
    if landscapeOrientation
        return UIInterfaceOrientationMask.landscapeRight
    else
        return UIInterfaceOrientationMask.portrait
    

我如何展示新控制器并设置方向。

let delegate = UIApplication.shared.delegate as! AppDelegate
delegate.landscapeOrientation = true

let controller = ToolTipWithCheckImageViewController()
controller.view.backgroundColor = .clear
controller.modalPresentationStyle = .overCurrentContext //Which causes the bug
controller.modalTransitionStyle = .crossDissolve
topController.present(controller, animated:true)

P.S:我也在其他一些控制器上使用了这个delegate.landspaceOrientation=true,因为我没有使用overCurrentContext 来呈现它,所以一切正常,所以该代码没有问题:)

P.S2:父控制器是UINavigationController

我认为这个问题对我有一些问题,但我无法弄清楚所提供的解决方案。 Can a viewcontroller presented modally over current context (UIModalPresentationStyleOverCurrentContext) be rotated with device?

【问题讨论】:

【参考方案1】:

我在一种覆盖视图控制器中也有同样的效果——如果你至少需要一个全屏“大小”作为背景视图,你可以使用 .overFullScreen 作为 modalPresentationStyle 而不是 .overCurrentContext(它仍然会显示背景通过一种快照,但旋转仍然有效)。

【讨论】:

以上是关于OverCurrentContext 防止方向改变的主要内容,如果未能解决你的问题,请参考以下文章

防止方向改变

防止在视图控制器中改变方向

防止 Xamarin Android 应用程序中的方向更改

如何防止自定义视图在屏幕方向更改时丢失状态

使用 UIModalPresentationStyle.OverCurrentContext 在 ViewController 之上的 UITransitionView

containerView的自定义动画中的modalPresentationStyle .overCurrentContext返回黑屏