【发布时间】:2019-04-15 22:33:37
【问题描述】:
我试图防止在特定 VC 中旋转(锁定为纵向) 嵌入在导航控制器中。
我目前正在这样做:
到 UINavigationController
extension UINavigationController {
public override func supportedInterfaceOrientations() -> Int {
return visibleViewController.supportedInterfaceOrientations()
}
}
在我的 VC 中:
class ViewController: UIViewController {
override func supportedInterfaceOrientations() -> Int {
return Int(UIInterfaceOrientationMask.Landscape.rawValue)
}
}
但是,当我们转到另一个支持横向和纵向的 VC(嵌入在另一个导航控制器中)时,我遇到了问题。假设,用户在新屏幕中旋转到横向。并单击返回以返回原始屏幕。该应用程序现在以横向显示,而不是在其 supportedInterfaceOrientations 覆盖中定义的纵向显示。如何防止这种错误行为?
我在 iOS 11 中读到,我们应该使用 viewWillTransition(to:with:) 来处理旋转(以及锁定)。在 UIViewController 文档中
“从 iOS 8 开始,所有与旋转相关的方法都已弃用。反而, 旋转被视为视图控制器大小的变化 视图,因此使用 viewWillTransition(to:with:) 报告 方法。当界面方向改变时,UIKit 会调用 窗口的根视图控制器上的方法。然后那个视图控制器 通知其子视图控制器,传播消息 整个视图控制器层次结构。”
你能指导一下如何实现吗?
【问题讨论】: