0

我的情况非常糟糕,我必须提交我的应用程序,但我发现了一个问题:

我的应用程序是基于导航的应用程序,在这个应用程序中,我只希望一个控制器能够横向:

--> 根控制器 --> WelcomeController --> LandscapeController

在横向控制器中,我在主视图中设置了两个视图,一个是纵向模式,告诉用户他必须转动设备,另一个设置为横向(在处于纵向模式的主视图中)

我已经对我的导航控制器进行了子类化:我MyNavController在其中设置了:

- (BOOL)shouldAutorotate
{
    return self.topViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
    return self.topViewController.supportedInterfaceOrientations;
}

因此,层次结构顶部的控制器决定是否navController可以旋转。

在我的应用程序委托中,我设置了:

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

}

所以我可以在我的应用程序上有两个方向。

在欢迎控制器中,我设置了:

- (NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationMaskPortrait);
    //return (UIInterfaceOrientationPortrait);

}

- (BOOL)shouldAutorotate
{
    return YES;
}

这意味着欢迎控制器只能处于纵向模式。

在我设置的景观控制器中:

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeLeft;

}


- (BOOL)shouldAutorotate
{
    return YES;
}

以便景观控制器可以旋转。

我使用以下方式调用景观控制器:

 LandscapeController *aLandscapeController = [LandscapeController] allo] init.... 
 [self.navigationController pushViewController:aLandscapeController animated:YES]; 

它可以工作,但有时信不信由你,当我推动横向控制器并转动设备时,欢迎控制器变成横向并且只占据屏幕的一半,因为它不能处于横向状态,这太糟糕了对我来说你无法想象。

我能做些什么来避免这种情况?

我会接受任何帮助,如果需要,我会捐款。

非常感谢。

4

1 回答 1

0

UINavigationController 文档的第二句:“此类不用于子类化。” 您是否尝试过没有覆盖导航控制器的方向行为?也许导航控制器默认做了正确的事情,即查询子控制器以确定方向应该是什么。但是通过覆盖它,您正在破坏正确的行为,这比您在视图转换期间的预期更复杂。

除了使用标准 UINavigationController 而不是您的子类之外,保持一切相同。或者,如果由于其他原因无法删除您的子类,请尝试将以下代码注释掉以进行快速测试:

/*- (BOOL)shouldAutorotate
{
    return self.topViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
    return self.topViewController.supportedInterfaceOrientations;
}*/

但是,如果您将文档说不应该的类子类化,那么您就不能依赖任何正常工作的东西。

于 2013-06-04T23:58:43.210 回答