shouldAutorotateToInterfaceOrientation:
Returns a Boolean value indicating whether the view controller supports the specified orientation.
(Deprecated in iOS 6.0. Override the supportedInterfaceOrientations and preferredInterfaceOrientationForPresentation methods instead.)
(http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/DeprecationAppendix/AppendixADeprecatedAPI.html)
因此,您可以在较新版本中使用的两种方法是:
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/preferredInterfaceOrientationForPresentation
和
- (NSUInteger)supportedInterfaceOrientations
此方法使用以下位掩码:
UIInterfaceOrientationMaskPortrait
UIInterfaceOrientationMaskLandscapeLeft
UIInterfaceOrientationMaskLandscapeRight
UIInterfaceOrientationMaskPortraitUpsideDown
UIInterfaceOrientationMaskLandscape
UIInterfaceOrientationMaskAll
UIInterfaceOrientationMaskAllButUpsideDown
http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/supportedInterfaceOrientations
更新:
好的,我不确定为什么它不适合你。
我刚刚创建了一个演示应用程序来复制您正在尝试做的事情:
(使用右键单击>复制图像网址并在新的浏览器选项卡中打开以查看更大的图片)
当方向标志为 NO 时,按钮文本显示“Landscape Denied”,并且在模拟器中旋转设备不会导致界面旋转,如预期的那样:
然而,在单击按钮以允许横向方向后,旋转模拟器设备实际上会改变界面的方向,如预期的那样:
您在另一个根视图控制器中没有任何其他方向委托方法覆盖当前视图控制器的方向委托方法,对吗?
另外,我不知道使用自动布局是否会干扰,我倾向于不使用它。在我的 XIB 文件中的视图中,我选择了“视图”对象,然后在检查器中,我取消了“ Use Auto Layout
”。我上面的示例项目屏幕截图没有使用自动布局。
更新 2:
好吧,我找到了这个解决方案,它与导航控制器一起作为窗口的根视图控制器工作(把它放在你的 AppDelegate.m 中):
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
NSUInteger orientations =UIInterfaceOrientationMaskAllButUpsideDown;
if(self.window.rootViewController)
{
UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
orientations = [presentedViewController supportedInterfaceOrientations];
}
return orientations;
}
在这个 Stackoverflow 帖子中:
iOS 6 自动旋转在 UiNavigationController
带有导航控制器的新屏幕截图: