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]
}
}
我正在使用 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]
}
}