1

我创建了一个简单的应用程序,它有一个红色背景和一个按钮(为了理解这个问题)。该应用程序处于横向模式并使用 iOS6 框架构建。

我已将支持的界面方向 pList 属性设置为只有:横向(右主页按钮)

如果我将方法 -(BOOL)shouldAutorotate 和 -(NSUInteger)supportedInterfaceOrientations 放在视图控制器中,并将其作为 windows rootViewController 启动,而不使用 UINavigationController,则可以实现横向。

但是,如果我使用下面示例中的子类 UINavigationController 并实现 -(BOOL)shouldAutorotate 和 -(NSUInteger)supportedInterfaceOrientations ,则不会实现横向并且永远不会调用 -(BOOL)shouldAutorotate 。

我的子类 UINavigationController 中有以下代码:

 //For iOS 5.x and below
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
 {
  return (interfaceOrientation != UIInterfaceOrientationLandscapeRight);
 }

//For iOS 6.0
-(NSUInteger)supportedInterfaceOrientations
{
 return UIInterfaceOrientationMaskLandscapeRight;
}

-(BOOL)shouldAutorotate
{
return YES;
}

在我的 appDelegate 我有这些方法:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{



self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];

viewController = [[MDViewController alloc] init]; //a very simple viewcontroller containing button on red background which should be in landscape mode
navigationController = [[MDNavigationController alloc] initWithRootViewController:viewController];
[self.window setRootViewController:navigationController.topViewController];

[self.window makeKeyAndVisible];
return YES;
}

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:  (UIWindow *)window {
   return UIInterfaceOrientationMaskLandscapeRight;
 }

我已经看到无数对我实施的类似问题的答案,但发现它们无法正常工作。谢谢。

4

1 回答 1

2

你不应该这样做:

[self.window setRootViewController:navigationController];

代替:

[self.window setRootViewController:navigationController.topViewController];

于 2012-10-25T23:49:49.530 回答