好的,这很奇怪。
在iOS 8中,如果在纵向中从UISplitViewController中的主面板呈现弹出窗口,则禁用旋转。我经历了一系列的测试并证实了这种情况。
在UISplitViewController上有一个私有方法,_shouldPreventAutorotation,在旋转时调用并检查popover内容控制器上的presentationController属性。如果返回非零值,则禁用旋转。如果覆盖该属性并返回nil,则再次启用旋转。
有没有人知道为什么在iOS 8中添加了这种行为?
我上传了演示此行为的测试项目here。
答案 0 :(得分:7)
因此,在Hopper中进行了一些调查和反编译之后,在UISplitViewController上有一个私有方法,当旋转设备时会调用该方法来确定是否应该禁用旋转。
如果主面板可见,主面板有一个子模态视图控制器(在这种情况下是弹出窗口),并且呈现的popover的presentationController属性返回一个非零值,然后禁用旋转。
我可以通过覆盖popover控制器上的-presentationController来覆盖此行为,并返回nil。不确定是否有任何副作用,但它确实有效。
- (UIPresentationController *)presentationController {
return nil;
}