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

时间:2010-06-25 20:03:49

标签: ipad orientation uisplitviewcontroller

所以我有一个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];

因此,这实际上会强制它正确绘制,除非应用程序在设备平放时启动,否则效果很好。然后我不知道肖像与风景(我知道无法找到它)。所以我基本上不能准确地说要做什么。

更重要的是上面的代码是一个HACK,应该有一个更好的方法,但对于我的生活我找不到。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

感谢您为纵向和横向修复此代码。我找到了一个快速解决问题的方法,当它在桌面上或倒置时(不确定谁会颠倒启动应用程序,但在这种情况下会发生同样的问题):

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


}
else {

    if (([UIApplication sharedApplication].statusBarOrientation == 1) || ([UIApplication sharedApplication].statusBarOrientation == 0))
    {
        [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationPortrait;
    }
    else {
        [UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;
    }

    NSLog(@"orientation: %d", [UIApplication sharedApplication].statusBarOrientation);

}

在我的应用程序中,这是有效的,因为我只是想强迫它们开始画像,如果它们之后移动到横向,它会旋转并且工作正常,因为我支持所有方向。

我认为这并不适用于所有情况,但这可能会帮助您走上正确的轨道。您只需要使用statusBarOrientation值并根据您发现的内容手动设置它,如果InterfaceOrientation无效(如果设备在桌面上是平的或者是倒置的话,则不是这样)。

希望有帮助...

编辑:此外,我需要在我的应用程序中了解他们在SplitViewController中选择新项目时的方向,因此当设备处于平坦或颠倒时它会变得很糟糕。我检测到它是扁平的还是倒置的方式是首先看看方向是否有效,如下:

if (UIDeviceOrientationIsValidInterfaceOrientation([UIDevice currentDevice].orientation))

但是如果不是,我检查一下self.popoverController是否为零。如果它不是,那么它是纵向的,如果它是,那么它的风景(基于splitViewController如何通过将其设置为nil来工作):

if (self.popoverController)
        {
            NSLog(@"in portrait");

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

        }

在应用程序启动时,这在App Delegate中不起作用,因为此时没有使用此detailViewController。我以为我会告诉你它是否有帮助。

答案 1 :(得分:0)

您的RootViewController是否代替您的detailViewCOntroller? 看起来你做的事情很糟糕......(可能是在SplitViewController.viewControllers中反转了viewControllers命令?)

答案 2 :(得分:0)

您需要确保将UISplitViewController的视图添加到UIWindow INSIDE您的app委托的application:application didFinishLaunchingWithOptions:方法(不是更晚),否则拆分视图最初将无法正确旋转。