我在推送导航堆栈中有9个视图控制器。我希望我的所有视图控制器都锁定为肖像,但我的第4个视图控制器支持所有方向。我已尝试了许多方法,但目前已将全局支持的设备方向设置为Portrait,并已将此代码添加到我的第4个视图控制器,以便它支持所有方向。
-(NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskAll;
}
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return (UIInterfaceOrientationPortrait | UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight);
}
如果我在没有导航控制器的单个视图控制器上尝试此操作,它可以正常工作。我还试图在所有视图控制器上实现这些方法,设置全局设置以支持所有方向,并添加代码以支持纵向方向,但无济于事。
答案 0 :(得分:1)
确实可以,我在我目前的一个项目中做到了。首先,您需要在Project常规选项卡中选中要支持的所有方向选项。 其次,您创建了一个UINavigationController的子类,它将成为您的导航控制器,例如,如果您有一个带有导航控制器的Storyboard,您必须从Interface Builder中的Identity Inspector选项卡中创建自定义导航控制器。
你显然需要覆盖这样的子类中的一些方法,它们是:
- (BOOL)shouldAutorotate {
return YES;
}
这告诉导航控制器它需要允许视图控制器旋转。 之后,重写以下方法,仔细阅读以下实现:
- (NSUInteger)supportedInterfaceOrientations {
return [self.topViewController supportedInterfaceOrientations];
}
这采用了topViewController(当前可见的)支持的界面方向。
因此,您需要覆盖所有视图控制器的相同方法,如下所示:
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
将自己锁定在肖像上并且您想要返回:
UIInterfaceOrientationMaskSomethingDifferentFromPortrait
在我的案例中是
UIInterfaceOrientationMaskAllButUpsideDown
希望它有所帮助。
答案 1 :(得分:0)
尝试在所有视图控制器中使用它来将它们修复为肖像,
(NSUInteger)应用程序:(UIApplication *)应用程序supportedInterfaceOrientationsForWindow:(UIWindow *)窗口 {
return UIInterfaceOrientationMaskPortrait;
}
为第4个viewController添加
(NSUInteger)应用程序:(UIApplication *)应用程序supportedInterfaceOrientationsForWindow:(UIWindow *)窗口 {
return UIInterfaceOrientationMaskAllButUpsideDown;
}