我正在开发一款仅支持横向模式的iPad应用程序(不会提交给App Store)。
应用程序中的大多数视图都被推送到带有隐藏导航栏的UINavigationController。
当我在前面提到的UINavigationController中的顶视图控制器中添加以下代码时, new UINavigationController(navController)以纵向模式创建并出现在横向和屏幕外。
MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyView" bundle:nil];
// viewController.view is landscape in MyView.xib
// myViewController is created in landscape mode
NSLog(@"%@", NSStringFromCGRect(myViewController.view.frame)); // {{0, 0}, {1024, 704}}
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:myViewController];
// navController is created in portrait mode (why?)
NSLog(@"%@", NSStringFromCGRect(navController.view.frame)); // {{0, 0}, {768, 1024}}
[self presentModalViewController:navController animated:YES];
// navController is shifted off-screen after it is presented modally (why?)
NSLog(@"%@", NSStringFromCGRect(navController.view.frame)); // {{1024, 0}, {748, 1024}}
我找不到任何可能的原因,也无法弄清楚如何将视图重定向到横向模式;我可以改变它的框架,但它的内容仍然是侧面的。
我尝试将以下内容添加到MyViewController.m中无济于事:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return !UIInterfaceOrientationIsPortrait(interfaceOrientation);
}
我甚至尝试将此代码添加到UINavigationController子类中,该子类也不起作用。
答案 0 :(得分:1)
我能够通过将视图导航控制器添加为应用程序根视图的子视图来使视图导航控制器正确定位。
MyRootViewController *myRootViewController = [[[UIApplication sharedApplication] delegate] myRootViewController];
[myRootViewController presentModalViewController:navController animated:YES];
此代码位于导航控制器的顶视图控制器中,该控制器是根视图的子视图。
答案 1 :(得分:0)
不确定这是否有效,但您可以将此密钥添加到您的Info.plist中,以指明您的应用支持的方向(至少,这将阻止它以纵向方式启动):
UISupportedInterfaceOrientations~ipad => (UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight)