我正在使用 this代码。
例如,我有 view1(仅纵向)和 view2(纵向+横向)。当您在 view1 中并单击一个按钮时,您会在整个屏幕上打开带有弹出窗口的 view2。当您关闭 view2 并且 view1 变得可见时,如果 View 2 处于横向状态,我想自动将其转换为纵向模式。有什么建议吗?
最佳答案
正如您所说的,您使用的是弹出窗口,我确定您使用的是导航 Controller 。这是 View 层次结构。
三个viewController对应xib。
viewController 仅设置为portrait
,secondViewController 设置为portrait and landScapeLeft
(您可以根据需要更改)。它可以按照您的要求正常工作。当第二张是横屏时,弹到第一张,会强制设置为竖屏。
NavViewController
View Controller
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()
}
}
SecondViewController.swift 类 SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override var shouldAutorotate: Bool {
return true
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return [.portrait, .landscapeLeft]
}
}
关于ios - Swift 3 - 强制自转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41233122/