当弹出窗口时,UISplitViewController在iOS 8中禁用横向旋转的肖像

Col*_*ber 5 objective-c rotation uisplitviewcontroller ios ios8

好的,这是一个奇怪的.

在iOS 8中,如果在纵向中从UISplitViewController中的主面板呈现弹出框,则禁用旋转.我经历了一系列的测试并证实了这种情况.

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

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

我上传了这个演示了此行为测试项目在这里.

Col*_*ber 7

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

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

我可以通过覆盖popover控制器上的-presentationController来覆盖此行为,并返回nil.尚不确定任何副作用,但它的工作原理.

- (UIPresentationController *)presentationController {
    return nil;
}
Run Code Online (Sandbox Code Playgroud)