我有一个UIViewController实例(viewController1),我想以横向模式锁定,我能够做到。在点击按钮时,我推送另一个支持两种方向的UIViewController(viewController2)。现在,如果用户将viewController2的方向更改为纵向并返回viewController1,则viewController1也会将其方向更改为纵向。我怎么能避免这种情况?
提前致谢。
答案 0 :(得分:0)
将这些方法添加到视图控制器
(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return(interfaceOrientation == UIInterfaceOrientationPortrait); }
第一个
(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
返回YES); }
那是第二个
- (BOOL)shouldAutorotateToInterfaceOrientation:UIInterfaceOrientation)toInterfaceOrientation { if(UIInterfaceOrientationIsPortrait(toInterfaceOrientation)){ 返回YES; } 返回NO; }
答案 1 :(得分:0)
如果那两个控制器都是UIViewController的实现,那么两个不同的类都是相互的!你可以在第一个实现方法shouldAutorotateToInterfaceOrientation!即使你回去,这也应该有效!
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
return YES;
}
return NO;}
答案 2 :(得分:0)
你说推,所以我假设两个ViewControllers都在NavigationController中。如果是这样,我将不得不让你失望,你想要的是不可能的。您的旋转回调正常工作,它们响应旋转,您无法强制它。正在发生的是正确的行为。
最佳解决方案是防止用户在前一个ViewController不支持的方向上返回,例如隐藏后退按钮。
前段时间我已经创建了自己的NavigationController(不是从UIViewController继承但它可以完全相同)并且我已经尝试实现你想要做的事情。在推送或弹出之前,如果即将显示的ViewController视图不支持当前方向,我将该ViewController的视图转换了90°并强制状态栏的方向为新的ViewController支持的方向。 一旦推或弹出完成,我就会做一个小技巧来强制旋转设备。如果从窗口中删除rootViewController的视图并重新添加它,则响应者链将被强制执行所有旋转回调。当发生这种情况时,我检查了ViewController的视图是否被转换并重置了该转换。
它确实起作用了。但这是一个混乱的代码,它违背了Apple当前的政策,即rootViewController应负责处理方向。同样在iOS6中,强制状态栏方向可以保证正常工作。所以我真的建议不要这样做,我已经从我自己的NavigationController中删除了它。