【问题标题】:UIViewController changes orientation while told not to do soUIViewController 更改方向,同时被告知不要这样做
【发布时间】:2015-10-26 05:13:30
【问题描述】:

我有一个UIViewController,我在其中覆盖了这两种方法:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    return UIInterfaceOrientationMask.Portrait
}

override func shouldAutorotate() -> Bool {
    return false
}

我的设备方向被勾选为纵向、横向左和右。

我清理了构建文件夹。

我的问题:当我转到横向时,应用会改变方向。

知道出了什么问题。我认为覆盖这两种方法就足够了,但似乎还不够。

【问题讨论】:

  • 这是嵌入在 UINavigationController 中的吗?
  • 确实如此。实际上我是最近才添加的,我不认为这可能是原因。
  • 是的,既然它嵌入在 UINavigationController 中,它仍然会旋转,因为 UINavigationControllers shouldAutorotate() 没有被覆盖。
  • 我很惊讶它不遵循嵌入式视图控制器的规则。我该如何解决?
  • 为 UINavigationController 创建一个扩展并覆盖 shouldAutorotate() 并在其中写入 return visibleViewController.shouldAutorotate() 并覆盖相应视图控制器中的 shouldAutorotate()

标签: ios swift uiviewcontroller uiinterfaceorientation


【解决方案1】:

由于您的视图控制器嵌入在 UINavigationController 中,并且仅在相应的视图控制器中覆盖 shouldAutorotate() 将不起作用,因为它会检查 UINavigationController/UITabBarController 的 shouldAutoRotate(),因此您必须创建 UINavigationController 的扩展

extension UINavigationController {
    public override func shouldAutorotate() -> Bool {
        return visibleViewController.shouldAutorotate()
    }
}

并且在相应的视图控制器中,无论您想根据您的要求锁定方向,都应该覆盖 shouldAutoRotate()

override func shouldAutorotate() -> Bool {
    return false
}

【讨论】:

  • 太棒了。我猜supportedInterfaceOrientations 也是一样
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 2020-08-05
相关资源
最近更新 更多