UiSplitViewController不会自动旋转

时间:2010-04-29 00:21:36

标签: uisplitviewcontroller autorotate

我最近遇到了一个问题。我的iPad应用程序以某种方式阻止iPad自动旋转。我的应用程序加载一个UISplitView,两个视图控制器都返回YES,用于shouldAutorotateToInterfaceOrientation:。我已经设置了我的info.plist以包含所有四个方向的“支持的界面方向”键。但是,当我运行应用程序时,旋转设备不会旋转splitView(即使我收到UIDeviceOrientationDidChangeNotification)。此外,当我以不同的方向退出我的应用程序,它在iPad主屏幕中启动时不会自动旋转到正确的视图,直到我再次旋转它,而我的应用程序没有运行....任何想法将不胜感激...

6 个答案:

答案 0 :(得分:8)

UISplitViewController是我曾经不得不使用的最温和的视图控制器子类之一。为了使其“完美”工作,必须作为应用程序窗口中的单个根视图存在。但是,你可以通过一些诡计解决这个问题 - 在我的情况下,我需要一个UITabBarController至少有两个不同的UISplitViewController作为视图控制器 - 但是你必须要照顾怪异涉及轮换和UISplitViewControllerDelegate回调未触发的案件。

以下希望Apple将来UISplitViewController与其他UIKit组件更兼容......

答案 1 :(得分:5)

我遇到了两个下属UINavigationControllers同样的问题。在我的情况下,旋转开始工作一旦我覆盖shouldAutorotateToInterfaceOrientation:在左控制器中总是返回'是'。

答案 2 :(得分:2)

我发现这很好用 - UISplitViewController的两个孩子都实现了shouldAutorotateToInterfaceOrientation

即如你有类似的东西:

        MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController_iPad" bundle:nil];
        UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];

        DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil];
        UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];

        self.splitViewController.viewControllers = @[masterNavigationController, detailNavigationController];

       self.window.rootViewController = self.splitViewController;

定义rootViewController的{​​{1}} 那么NSApplicationMasterViewController都应该实现:

DetailViewController

确保轮换有效。

答案 3 :(得分:1)

您的UISplitViewController是否设置为根视图控制器?如果没有,这可能是您的问题的原因。我遇到了类似的问题 - 状态栏会旋转,但我的细节和主视图会保持不变。我重新安排了视图,以便UISplitViewController是根,然后我的“主菜单”被呈现为分割视图顶部的模态视图控制器,它使旋转问题消失。

根据iPad Programming Guide,“应始终将拆分视图控制器的视图安装为应用程序窗口的根视图。”

希望这有帮助。

答案 4 :(得分:0)

你说你的第一个问题是,UISplitView阻止你自动旋转。尝试使用Splitview的子类代替enbales autorotating:

@implementation SplitViewControllerRotating
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
    NSLog(@"SplitViewControllerRotating shouldAutorotate");
    return YES;
}
@end

你的第二个问题听起来很奇怪。您说退出应用程序后必须旋转,以便iPad识别界面。不能帮助你。

答案 5 :(得分:0)

我现在遇到了同样的问题。原因是除了UISplitViewController的视图外,我不小心将另一个视图添加到了窗口。删除额外的视图使它工作。