Как вы уже сказали, вы используете всплывающее окно, я уверен, что вы используете navigationController. вот иерархия представлений.
Существует три видаКонтроллеры, соответствующие этим xib.
Только для контроллера ViewController установлено значение portrait
, а для второго контрольного устройства установлено значение 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()
}
}
SecondViewController.swift класс SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override var shouldAutorotate: Bool {
return true
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return [.portrait, .landscapeLeft]
}
}
Ответ уже существует: [Как заблокировать конкретный контроллер с определенной ориентацией просмотра] (http://stackoverflow.com/questions/28938660/how-to-lock-orientation-of-one-view-controller-to-portrait-mode-only-in-swift/28955624 # 28955624) –
переход на быстрый 3 не составляет труда. –