swift - 在 swift 4 中为 UINavigationController 和 UIViewController 禁用屏幕方向

标签 swift uiviewcontroller uinavigationcontroller orientation autorotate

您好,我想在我的项目中的一个 View Controller 中停止自转。在下面的快照中, enter image description here

我有一个起始 UINavigationController,然后是一个 UIViewController。我已经实现了以下代码来停止自转:

extension UINavigationController {

    override open var shouldAutorotate: Bool {
        get {
            return false
        }
    }

    override open var supportedInterfaceOrientations: UIInterfaceOrientationMask{
        get {
            return UIInterfaceOrientationMask.landscape
        }
    }}

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    override func viewDidLoad() {
        super.viewDidLoad()
       // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override open var shouldAutorotate: Bool {
        return false
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask
    {
        return .landscape
    }
  }

但是上面的代码好像没有调用也没有生效。我正在使用 Xcode 9swift 4.0。 任何建议将不胜感激。

问候, 妮娜

最佳答案

创建一个类并将其设置为 UINavigationController,然后在您的 Storyboard/XIB 中使用这个新类

在你的扩展中:

class NavigationController: UINavigationController {     
    override var shouldAutorotate: Bool {
        return topViewController?.shouldAutorotate ?? super.shouldAutorotate
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return topViewController?.supportedInterfaceOrientations ?? super.supportedInterfaceOrientations
    }
}

在你的 Controller 中:

override var shouldAutorotate: Bool {
    return false
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .portrait
}

关于swift - 在 swift 4 中为 UINavigationController 和 UIViewController 禁用屏幕方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47867882/

相关文章:

ios - 关闭并呈现相同的 View Controller

ios - 调整导航 Controller 大小仅适用于纵向?

ios - 如何调整导航栏标题和编辑后退按钮

ios - 在保持默认大小的同时更改 UINavigationBar 字体类型

ios - 不同时间重复通知

ios - UI 在 tableview reloadData() 上卡住

iOS TableView 错误 - 在键值观察者仍注册时释放 - DGElasticPullToRefresh

ios - 以编程方式设置 UIButton 文本颜色

ios - 如何在 Swift 中将注册用户写入数据库?

ios - 弹出 VC 时 Google 登录按钮不起作用