Swift: 为一个控制器启用横向,为其余控制器启用纵向

Swift: Enable landscape for one controller and for the rest only portrait

我的应用程序只有纵向模式,但我需要一个控制器也支持横向模式。

这是我的 info.plist:

    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>

并且在我的应用委托中添加了这个:

var shouldRotate = false

    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        return shouldRotate ? .allButUpsideDown : .portrait
    }

在我的控制器中:

    override func viewDidLoad() {
        super.viewDidLoad()
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.shouldRotate = true // or false to disable rotation
    }

但是控制器不旋转,我的错误是什么?此控制器在导航控制器上以模式打开

控制器单独过去,根据您的要求。

override public var shouldAutorotate: Bool {
    return true
} 

override public var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .all
}

override public var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    return .all
}

这应该在 viewcontroller 中,您需要横向和纵向的位置。

// 其他视图控制器:

覆盖public var shouldAutorotate: Bool { return 错误 }

override public var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .portrait
}

override public var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    return .portrait
}

// 在 viewcontroller 中添加这个你想要应用在纵向定位中。

为整个应用程序启用所有必需的方向。

并且请删除您在 appDelegate 中与方向相关的代码