iOS - 在 segue 上意外旋转回纵向

标签 ios swift segue

第一次发帖,如果我没有在我的问题中提供正确的信息,请原谅我...

我正在创建一个应用程序(快速),我想支持所有屏幕的所有屏幕方向(并相应地在 Xcode 常规选项卡中进行设置)。有一个登录/启动屏幕,然后应用其余部分的根 Controller 是一个 UINavigationController。

我的问题 - 即使设备处于横向,屏幕也会在任何 segue 上旋转回纵向,并且屏幕都支持横向! 这是 segue 的标准行为吗?如果是这样,我能以某种方式阻止它吗? 需要明确的是 - 我只希望屏幕旋转在 segue 之后继续反射(reflect)设备方向 - 目前所有屏幕都支持所有方向。

我已尝试将 shouldAutorotate 设置为给定屏幕/ View Controller 返回 false,并扩展 UINavigationController 以引用可见 View Controller 的 shouldautorotate() 函数,如下所示:

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

这可以防止在 segue 上旋转远离(横向)设备方向,但是当然如果用户旋转回纵向屏幕仍然是横向...

看起来这应该非常简单,但我找不到任何信息或其他问题,只是关于限制允许的方向的问题(我只希望屏幕方向始终反射(reflect)设备方向)。 .

一个想法 - 有没有办法检测是否在 segue 之后调用了 shouldAutorotate 函数?并在此实例中返回 false,否则返回 true?

如有任何帮助,我们将不胜感激!

谢谢

最佳答案

将这两个方法添加到您的 View Controller 中:

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


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

关于iOS - 在 segue 上意外旋转回纵向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36271944/

相关文章:

ios - 更新到 IOS 9 和 Xcode 7.4 后出现多个错误

swift - 扩展与子类。当我为 UIButton 设置背景颜色时如何解释不同的行为

ios - 以编程方式创建的 UITableViewCell 仅使用 AutoLayout 显示其第一个 subview

swift - 结合 didSelectRowAt 和 prepareForSegue?

ios - Swift iOS -UrlSession 移动非常慢。有没有办法同时执行多个任务?

ios - 在 Swift 中实例化带有标识符的 View Controller

ios - 使用 corelocation 框架计算速度显示在模拟器中而不是在 device-ios8 中

swift - 使用 DispatchQueue swift 3 下载图像时发现 Optional 为 nil

swift - 只有在 "Has no segue with identifier"上调用 performSegue 时才会出现 `tableView (_: didSelectRowAt:)` 错误

ios - 无法识别的选择器发送到实例并在 iOS 应用程序的 main.m 中崩溃