我最近遇到了一个问题。我的 iPad 应用程序以某种方式阻止了 iPad 自动旋转。我的应用程序加载了一个 UISplitView,两个视图控制器都为 shouldAutorotateToInterfaceOrientation: 返回 YES。我已经设置了我的 info.plist 以包含所有四个方向的“支持的界面方向”键。但是,当我运行应用程序时,旋转设备不会旋转 splitView(即使我收到 UIDeviceOrientationDidChangeNotification)。此外,当我以不同的方向退出我的应用程序时,它在 iPad 主屏幕中启动时不会自动旋转到正确的视图,直到我再次旋转它而不运行我的应用程序......任何想法将不胜感激...... .
6 回答
UISplitViewController
是我用过的最喜怒无常的视图控制器子类之一。为了让它“完美地”工作,它必须作为应用程序窗口中的单个根视图存在。然而,你可以通过一些技巧来解决这个问题——在我的例子中,我需要一个UITabBarController
至少有两个不同UISplitViewController
的 s 作为视图控制器——但是你必须处理涉及旋转和UISplitViewControllerDelegate
回调不触发的奇怪情况。
这里希望Apple将来UISplitViewController
与其他组件更加兼容......UIKit
我在两个从属 UINavigationControllers 中遇到了同样的问题。在我的情况下,一旦我在左侧控制器中覆盖 shouldAutorotateToInterfaceOrientation: 以始终返回“YES”,旋转就开始工作。
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;
}
以确保轮换工作。
您的 UISplitViewController 是否设置为您的根视图控制器?如果不是,那可能是您的问题的原因。我遇到了类似的问题 - 状态栏会旋转,但我的详细信息和主视图会保持不变。我重新排列了视图,使 UISplitViewController 成为根,然后我的“主菜单”作为模式视图控制器呈现在拆分视图的顶部,它使旋转问题消失了。
根据iPad 编程指南,“拆分视图控制器的视图应始终安装为应用程序窗口的根视图。”
希望这可以帮助。
你说你的第一个问题是 UISplitView 阻止你自动旋转。尝试使用 Splitview 的子类,而不是启用自动旋转:
@implementation SplitViewControllerRotating
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
NSLog(@"SplitViewControllerRotating shouldAutorotate");
return YES;
}
@end
你的第二个问题听起来很奇怪。你说退出你的应用程序后你必须旋转,以便你的 iPad 识别界面方向。帮不了你。
我现在有同样的问题。原因是除了 UISplitViewController 的视图之外,我不小心在窗口中添加了另一个视图。删除额外的视图使其工作。