我正在与Xamarin合作,并且在以当前设备方向启动我的应用时遇到了麻烦。
我有一个UINavigationController,我在我的主UIWindow上设置为根控制器。我创建了一个自定义的UINavigationController来覆盖这些方法: GetSupportedInterfaceOrientations 和 ViewWillTransitionToSize
如果我将iPad保持在横向模式并启动应用程序,它将以纵向模式启动,然后以横向旋转。我想让它以与设备的物理方向相同的方向开始。从我阅读过的文档看来,从iOS 8开始,与旋转相关的所有内容都应该在根uiview控制器中处理,这是我的自定义UINavigationController。
这就是我的问题......让我们说我想以当前设备的方向启动我的应用程序,然后在应用程序加载后阻止除Portrait之外的所有内容。我尝试了以下2个解决方案,但都没有。
1-我将所有接口方向放在info.plist文件中受支持的接口方向键中。我在横向模式下按住iPad时启动了应用程序。在这种情况下,我的应用程序的开始方向与酷炫的设备相同。不酷的是它不再调用我的导航控制器方法GetSupportedInterfaceOrientations。因此,即使我将该方法的返回值仅更改为后一个,它也绝对没有,因为该方法永远不再被调用。
2-我从info.plist文件中删除了所有支持的接口方向。我在横向模式下按住iPad时推出了应用程序。在这种情况下,我的应用程序以纵向模式启动,然后旋转到横向。我想阻止旋转,只需在当前设备的方向(横向)启动应用程序。通过这种设置,我可以稍后更改支持的方向,因为每次我们尝试旋转应用程序时都会调用导航控制器方法GetSupportedInterfaceOrientations。
在apple's doc中,它表示"在发布时,应用应始终以纵向方式设置其界面。应用程序(_:didFinishLaunchingWithOptions :)方法返回后,应用程序使用上述视图控制器旋转机制在显示窗口之前将视图旋转到适当的方向。"
视图旋转到适当方向 PRIOR 以显示窗口的部分似乎对我不起作用。它显示窗口,然后旋转它。
那么如何在当前设备的方向上启动应用程序(没有用户看到您的第一个视图从纵向旋转到任何方向),然后能够在应用程序中更改支持的方向?示例:我将iPad保持在横向模式下。我启动了我的应用。我看到的第一个视图已经处于横向模式。然后我可以旋转我的iPad以前后纵向/横向更改视图。然后我单击一个按钮,将支持的方向更改为纵向,这样就无法将方向更改为横向。
谢谢!