Swift 3 - 强制自转

Swift 3 - Force autorotation

我正在使用 this 代码。

比如我有view1(只有纵向)和view2(纵向+横向)。当您在 view1 中并单击一个按钮时,您会在整个屏幕上打开带有弹出窗口的 view2。当您关闭 view2 并且 view1 变得可见时,如果视图 2 处于横向状态,我想自动将其转换为纵向模式。有什么建议吗?

正如您所说的,您使用的是弹出窗口,我确定您使用的是导航控制器。这是视图层次结构。

有3个viewController对应那些xib.

只将viewController设置为portrait,secondViewController设置为portrait and landScapeLeft(你可以改成你需要的)。它可以按照您的要求正常工作。当第二张横屏时,弹到第一张,会强制设置为竖屏

NavViewController

ViewController

SecondViewController

//NavViewController.swift

class NavViewController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override var shouldAutorotate: Bool {
        return (visibleViewController?.shouldAutorotate)!
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return (visibleViewController?.supportedInterfaceOrientations)!
    }
}

//ViewController.swift

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override var shouldAutorotate: Bool {
        return false
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return .portrait
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let value =  UIInterfaceOrientation.portrait.rawValue
        UIDevice.current.setValue(value, forKey: "orientation")
        UIViewController.attemptRotationToDeviceOrientation()
    }
}

第二ViewController.swift class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override var shouldAutorotate: Bool {
        return true
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return [.portrait, .landscapeLeft]
    }
}