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

Posted

技术标签:

【中文标题】iOS - 在segue上意外旋转回纵向【英文标题】:iOS - unexpected rotation back to portrait on segue 【发布时间】:2016-03-28 21:58:52 【问题描述】:

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

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

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

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

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

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

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

一个想法 - 有没有办法检测是否在 segue 之后调用了 shouldAutorotate 函数?在这种情况下返回 false,否则返回 true?

任何帮助将不胜感激!

谢谢

【问题讨论】:

【参考方案1】:

将这两种方法添加到您的视图控制器中:

override func shouldAutorotate() -> Bool 
    return false



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

【讨论】:

以上是关于iOS - 在segue上意外旋转回纵向的主要内容,如果未能解决你的问题,请参考以下文章

旋转回纵向时视口缩放中断

Swift 致命错误:在 segue 上展开 Optional 值时意外发现 nil

在 ios6 和 ios7 的 MPMoviePlayerViewController 中将横向旋转为纵向

从纵向旋转到横向时,iPad 布局会放大

PKPaymentAuthorizationViewController 在 iOS 8.4 上意外崩溃

斯威夫特如何将我的图像移回中间后?或将其旋转回原点位置