从窗体弹出ViewController时出现InterfaceOrientation问题

时间:2011-09-29 10:17:05

标签: iphone objective-c ios xcode

我的应用程序开始工作得很好,但我有一个小问题,我无法弄清楚如何修复。

这是一个基于视图的应用程序,我的appDelegate文件中有一个NavigationController,它根据需要推送各种ViewControllers。进入“前进方向”一切运作良好,实际上看起来很完美,但我遇到的问题是VC从堆栈中弹出。这是我用来显示VC的代码,然后只使用后退按钮返回。

UINavigationController *iaxNC = [[UINavigationController alloc] init];
LogInViewController *logInVC = [[LogInViewController alloc] init];
[iaxNC pushViewController:logInVC animated:NO];
[logInVC release];
[_window addSubview:iaxNC.view];
[_window makeKeyAndVisible];

加载我的登录视图,然后代码检查是否有任何用户在加载SetUp屏幕之前(如果没有),如下所示:

setUpVC = [[SetUpViewController alloc] init];
setUpVC.firstUse = self.firstUse;
[self.navigationController pushViewController:setUpVC animated:YES];
[setUpVC release];

当我从SetUp视图点击后退按钮返回LogIn视图时,会出现问题。

我有大多数VC的肖像和风景视图,这些VC是Michael Tyson的TPMultiLayoutViewController的子类。纵向视图连接为* portraitView和*视图,横向视图连接为* landscapeView。

问题在于:

如果在按下后退按钮之前将VC推入视图并更改设备的方向,那么当我点击“返回”时,前一个VC将以其原始格式显示(即不旋转到当前方向)也会出现视图的左下角位于屏幕的左下角。然后,它再“旋转”,直到我再次旋转设备然后一切都很好,并按预期运行。

所以问题是我正在研究TPMultiView子类的内容,但我并没有假装完全了解它(其中可能存在我的真实问题),但作为权宜之计的解决方案有一种方法可以强迫当“pushee's”VC弹出时,“推动器”VC的视图出现在它的前一个方向(虽然是短暂的 - 然后允许它在显示后旋转)?

这有意义吗?

解决了它!问题是我在LogInVC中包含了我自己的viewWillAppear方法但是我没有调用[super viewWillAppear]所以超类的效果从来没有真正起作用,是吗!感谢您的投入。我可以推荐子类BTW中的TPMultiView drop非常好用。

1 个答案:

答案 0 :(得分:0)

您应首先验证shouldAutoRotateToInterfaceOrientation:的实施是否适用于所有视图控制器。

然后确保视图控制器的视图具有适当的autoresizingMask设置。如果您已在Interface Builder中创建了视图控制器及其视图,则应在此处设置调整大小掩码。

否则,在您的-loadView-viewDidLoad方法中,您应该使用此行:

self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth |
                             UIViewAutoresizingFlexibleHeight;