OverCurrentContext防止方向更改

时间:2019-01-25 06:12:23

标签: ios swift orientation

我在当前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)

PS:我也在其他一些控制器上也使用了此delegate.landspaceOrientation=true,因为我没有将它与overCurrentContext一起提供,所以一切正常,因此该代码没有问题:)

P.S2 :父控制器是UINavigationController

我认为这个问题对我有些问题,但是我不知道所提供的解决方案。 Can a viewcontroller presented modally over current context (UIModalPresentationStyleOverCurrentContext) be rotated with device?

1 个答案:

答案 0 :(得分:0)

我在一种叠加视图控制器中具有相同的效果-如果您无论如何至少需要全屏“大小”的背景视图,都可以将.overFullScreen用作modalPresentationStyle而不是.overCurrentContext(它仍会显示通过某种快照作为背景,但旋转仍然有效。