出现弹出窗口时,iOS 8 中禁用 UISplitViewController 纵向到横向旋转

Posted

技术标签:

【中文标题】出现弹出窗口时,iOS 8 中禁用 UISplitViewController 纵向到横向旋转【英文标题】:UISplitViewController portrait to landscape rotation disabled in iOS 8 when popover presented 【发布时间】:2015-02-13 18:43:36 【问题描述】:

好吧,这很奇怪。

ios 8 中,如果在 UISplitViewController 的主面板中显示弹出框,而在纵向时,则禁用旋转。我已经进行了一系列测试并确认是这种情况。

UISplitViewController 上有一个私有方法_shouldPreventAutorotation,它在旋转时被调用并检查弹出框内容控制器上的presentationController 属性。如果这返回一个非零值,则禁用旋转。如果您覆盖该属性并返回 nil,则再次启用旋转。

有人知道为什么在 iOS 8 中添加了这种行为吗?

我上传了演示此行为的测试项目here。

【问题讨论】:

你找到解决办法了吗? 是的,我发布了我在下面找到的解决方案。 您的解决方案关闭了视图,我想旋转视图。 【参考方案1】:

因此,在 Hopper 中进行了更多调查和反编译之后,UISplitViewController 上有一个私有方法,当设备旋转时会调用该方法来确定是否应禁用旋转。

如果主面板可见,则主面板有一个子模态视图控制器(在本例中为弹出框),并且显示的弹出框的presentationController 属性返回非零值,然后禁用旋转。

我可以通过覆盖弹出框控制器上的 -presentationController 来覆盖此行为,并返回 nil。不确定是否有任何副作用,但它有效。

- (UIPresentationController *)presentationController 
    return nil;

【讨论】:

这对你来说是怎么成功的,我们能不能因为这样做而面临应用商店的拒绝。 不,这不使用任何私有 API,因此它是 App Store 安全的。我们已经在商店里买了几年了,没有任何问题。 谢谢您的帮助。

以上是关于出现弹出窗口时,iOS 8 中禁用 UISplitViewController 纵向到横向旋转的主要内容,如果未能解决你的问题,请参考以下文章

当用户在 iPad 上的 WKWebView 中点击电话号码时如何禁用弹出窗口?

Sublimelinter - 如何在错误时禁用窗口弹出

如何在 Spring 服务器配置中禁用“需要身份验证的弹出窗口”?

弹出窗口未出现在 iOS 中

当 html 中的标签更改时,粘贴弹出窗口在 safari(装有 iOS 8.0.2 的 iPad)中消失

弹出窗口可见时禁用所有交互