我的情况非常糟糕,我必须提交我的应用程序,但我发现了一个问题:
我的应用程序是基于导航的应用程序,在这个应用程序中我只想要一个控制器能够横向显示:
- >根控制器 - > WelcomeController - > LandscapeController
在横向控制器中,我在主视图中设置了两个视图,一个是纵向模式告诉用户他必须转动设备,另一个是设置为横向(在主视图中处于纵向模式)< / p>
我已经将我的导航控制器子类化了:MyNavController
我已经设置了:
- (BOOL)shouldAutorotate
{
return self.topViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
return self.topViewController.supportedInterfaceOrientations;
}
因此,层次结构顶部的控制器决定navController
是否可以旋转或不旋转。
在我的app委托中我设置了:
- (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;
}
使景观控制器可以旋转。
我使用:
调用Landscape控制器 LandscapeController *aLandscapeController = [LandscapeController] allo] init....
[self.navigationController pushViewController:aLandscapeController animated:YES];
它有效,但有时候相信我与否,当我推动景观控制器并且我转动设备时,它是欢迎控制器,它变成了风景,只占用了一半的屏幕,因为它不能在景观和这对我来说太糟糕了,你无法想象。
我该怎么做才能避免这种情况?
我会接受任何帮助,如果必须,我会捐款。
非常感谢你。
答案 0 :(得分:0)
UINavigationController文档的第二句:“此类不用于子类化。”您是否在没有覆盖导航控制器的方向行为的情况下尝试过它?也许导航控制器默认做正确的事情,即查询子控制器以确定方向应该是什么。但是通过覆盖它,你正在打破正确的行为,这比你在视图转换过程中预期的要复杂得多。
除了使用标准的UINavigationController而不是你的子类之外,保持一致。或者,如果由于其他原因无法删除子类,为了快速测试,请尝试注释掉此代码:
/*- (BOOL)shouldAutorotate
{
return self.topViewController.shouldAutorotate;
}
- (NSUInteger)supportedInterfaceOrientations
{
return self.topViewController.supportedInterfaceOrientations;
}*/
但是,如果您继承了文档中不应该使用的类,则不能依赖任何正常工作。