6

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

4

6 回答 6

8

UISplitViewController是我用过的最喜怒无常的视图控制器子类之一。为了让它“完美地”工作,它必须作为应用程序窗口中的单个根视图存在。然而,你可以通过一些技巧来解决这个问题——在我的例子中,我需要一个UITabBarController至少有两个不同UISplitViewController的 s 作为视图控制器——但是你必须处理涉及旋转和UISplitViewControllerDelegate回调不触发的奇怪情况。

这里希望Apple将来UISplitViewController与其他组件更加兼容......UIKit

于 2010-09-01T18:35:51.427 回答
5

我在两个从属 UINavigationControllers 中遇到了同样的问题。在我的情况下,一旦我在左侧控制器中覆盖 shouldAutorotateToInterfaceOrientation: 以始终返回“YES”,旋转就开始工作。

于 2011-02-25T07:21:17.813 回答
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你的NSApplication 然后两者MasterViewController并且DetailViewController应该实现:

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return YES;
}

以确保轮换工作。

于 2013-06-05T07:13:19.807 回答
1

您的 UISplitViewController 是否设置为您的根视图控制器?如果不是,那可能是您的问题的原因。我遇到了类似的问题 - 状态栏会旋转,但我的详细信息和主视图会保持不变。我重新排列了视图,使 UISplitViewController 成为根,然后我的“主菜单”作为模式视图控制器呈现在拆分视图的顶部,它使旋转问题消失了。

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

希望这可以帮助。

于 2010-06-25T16:16:53.753 回答
0

你说你的第一个问题是 UISplitView 阻止你自动旋转。尝试使用 Splitview 的子类,而不是启用自动旋转:

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

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

于 2010-05-27T08:32:12.180 回答
0

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

于 2010-06-13T19:24:53.877 回答