在iOS 8中,当弹出窗口出现时,UISplitViewController横向旋转被禁用。

5

好的,这是一个奇怪的问题。

iOS 8中,如果从UISplitViewController的主面板中以纵向方式呈现弹出窗口,则无法旋转。我运行了一堆测试,并确认了这一点。

UISplitViewController上有一个私有方法_shouldPreventAutorotation,当旋转时会调用它,并检查弹出窗口的内容控制器的presentationController属性。如果返回非nil值,则禁用旋转。如果您重写该属性并返回nil,则可以再次启用旋转。

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

我上传了演示此行为的测试项目在此处


你找到了解决方案吗? - Shashikant More
是的,我已经在下面发布了我找到的解决方案。 - Colin Humber
您的解决方案是关闭视图,但我想旋转视图。 - Shashikant More
1个回答

7
因此,在Hopper中进行更多的调查和反编译后,发现UISplitViewController上有一个私有方法。该方法在设备旋转时被调用,确定是否应禁用旋转。
如果主面板可见,主面板具有子模态视图控制器(在本例中为弹出窗口),并且呈现的弹出窗口的presentationController属性返回非空值,则禁用旋转。
我可以通过覆盖弹出窗口控制器上的-presentationController来覆盖此行为,并返回nil。目前不确定是否会有任何副作用,但它有效。
- (UIPresentationController *)presentationController {
    return nil;
}

这对你有什么影响,我们会因此面临应用商店拒绝吗? - Ravi Dalmia
1
不,这并没有使用任何私有API,因此它是App Store安全的。我们已经在商店里有了几年时间,没有出现任何问题。 - Colin Humber
谢谢你在这里的帮助。 - Ravi Dalmia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接