我最近遇到了一个问题。我的iPad应用程序以某种方式阻止iPad自动旋转。我的应用程序加载一个UISplitView,两个视图控制器都返回YES,用于shouldAutorotateToInterfaceOrientation:。我已经设置了我的info.plist以包含所有四个方向的“支持的界面方向”键。但是,当我运行应用程序时,旋转设备不会旋转splitView(即使我收到UIDeviceOrientationDidChangeNotification)。此外,当我以不同的方向退出我的应用程序,它在iPad主屏幕中启动时不会自动旋转到正确的视图,直到我再次旋转它,而我的应用程序没有运行....任何想法将不胜感激...
答案 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}}
那么NSApplication
和MasterViewController
都应该实现:
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的视图外,我不小心将另一个视图添加到了窗口。删除额外的视图使它工作。