iPad UISplitViewController启动方向-以纵向显示的根视图

iPad UISplitViewController启动方向-以纵向显示的根视图,ipad,orientation,uisplitviewcontroller,Ipad,Orientation,Uisplitviewcontroller,所以我有一个UISplitViewController,它是我的程序的根视图。我已将初始方向设置为LandscapeLeft,并在plist中支持所有4个方向 如果我以纵向方式启动应用程序,显示的视图是我的根视图而不是细节视图,这显然不是我想要的。只要我转动设备,一切都会从那里开始 我已经搜索了这个网站和其他网站,但没有找到修复方法。最近的一次是在我的应用程序代理中添加以下内容: [[UIDevice currentDevice] beginGeneratingDeviceOrientation

所以我有一个UISplitViewController,它是我的程序的根视图。我已将初始方向设置为LandscapeLeft,并在plist中支持所有4个方向

如果我以纵向方式启动应用程序,显示的视图是我的根视图而不是细节视图,这显然不是我想要的。只要我转动设备,一切都会从那里开始

我已经搜索了这个网站和其他网站,但没有找到修复方法。最近的一次是在我的应用程序代理中添加以下内容:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

if (UIDeviceOrientationIsValidInterfaceOrientation([UIDevice currentDevice].orientation)) {
    if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation))
        [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;
    else
        [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationPortrait;
}

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
因此,这基本上迫使它正确地绘制,这非常有效,除非当应用程序启动时设备放平。然后我不知道肖像和风景(我知道没有办法找到它)。所以我基本上不能准确地说该怎么办

更重要的是,上面的代码是一种黑客行为,应该有更好的方法,但就我而言,我找不到它


有什么想法吗?

您的RootViewController正在显示,而不是detailViewCOntroller?
看来你在做坏事。。。(可能反转的viewControllers在SplitViewController.viewControllers中排序?

您需要确保将UISplitViewController的视图添加到
应用程序内的UIWindow中:应用程序完成启动时使用选项:
应用程序委托的方法(不迟),或者分割视图最初无法正确旋转。

感谢您的代码修复纵向和横向视图。我发现了一个快速解决问题的方法,当它平放在桌子上或倒置时(不确定谁会将应用程序倒置启动,但在这种情况下也会发生相同的问题):

在我的应用程序中,这是可行的,因为我只是想强制他们进入纵向开始,如果他们在这之后移动到横向,它会旋转,工作正常,因为我支持所有方向

我不认为这在所有情况下都有效,但这可能会帮助你走上正确的道路。如果InterfaceOrientation无效(如果设备平放在桌子上或倒置,则无效),则只需使用statusBarOrientation值,并根据您发现的效果手动设置即可

希望这有助于

编辑:另外,当他们在SplitViewController中拾取新项目时,我的应用程序需要知道方向,所以当设备是平的或倒置时,它是不可靠的。我检测它是平的还是倒置的方法是先看看方向是否像你做的那样有效:

if (UIDeviceOrientationIsValidInterfaceOrientation([UIDevice currentDevice].orientation))
但如果不是,我检查self.popoverController是否为零。如果不是,则为纵向,如果是,则为横向(根据splitViewController的工作方式,将其设置为零或否):


但在应用程序启动时,这在应用程序委托中不起作用,因为此时未使用此detailViewController。我只是想让你知道它是否有帮助。

没有,正如我上面所说的,只要我旋转,它就可以正常工作。这只是在launchYup上,这是我添加它的地方。还是没有骰子。当您握住设备时,它可以正常工作,但是如果它是平放在它的背部,我们就有这些问题。
if (UIDeviceOrientationIsValidInterfaceOrientation([UIDevice currentDevice].orientation))
if (self.popoverController)
        {
            NSLog(@"in portrait");

        }
        else {
            NSLog(@"in landscape");

        }