1

我有一个要以纵向模式显示的应用程序。但我只想在两种模式下显示一个视图。

我已经为 iOS5 做了这个。但在 iOS6 中,我无法做到这一点。

我也尝试了很多代码来解决它。

我在我的应用程序中使用导航并且在 ios6 中无法在两种模式下仅旋转一个视图。您要么固定旋转以查看视图,要么旋转整个应用程序。我对吗?

我怎么解决这个问题?

4

2 回答 2

1

在 ios6 中,您是否尝试在 plist 中使用此功能,如下图所示:-

在此处输入图像描述

你也可以在 xcode->projectname->summary 中设置:-

在此处输入图像描述

于 2013-01-29T05:30:48.770 回答
1

来自 Apple 的 iOS 6 SDK 发行说明:

iOS 6 中的自动旋转正在发生变化。在 iOS 6 中,不推荐使用 UIViewController 的 shouldAutorotateToInterfaceOrientation: 方法。取而代之的是,您应该使用 supportedInterfaceOrientationsForWindow: 和 shouldAutorotate 方法。

More responsibility is moving to the app and the app delegate. Now, iOS containers (such as UINavigationController) do not consult

他们的孩子来决定他们是否应该自动旋转。默认情况下,应用程序和视图控制器支持的界面方向设置为 iPad 惯用语的 UIInterfaceOrientationMaskAll 和 iPhone 惯用语的 UIInterfaceOrientationMaskAllButUpsideDown 。

A view controller’s supported interface orientations can change over time—even an app’s supported interface orientations can change

随着时间的推移。每当设备旋转或视图控制器以全屏模式呈现样式呈现时,系统都会向最顶层的全屏视图控制器(通常是根视图控制器)询问其支持的界面方向。此外,仅当此视图控制器从其 shouldAutorotate 方法返回 YES 时,才会检索支持的方向。系统将视图控制器支持的方向与应用支持的方向(由 Info.plist 文件或应用委托的 application:supportedInterfaceOrientationsForWindow: 方法确定)相交以确定是否旋转。

The system determines whether an orientation is supported by intersecting the value returned by the app’s

supportedInterfaceOrientationsForWindow:方法,其返回值由最顶层全屏控制器的 supportedInterfaceOrientations 方法返回。setStatusBarOrientation:animated: 方法并未完全弃用。它现在仅在最顶层全屏视图控制器的 supportedInterfaceOrientations 方法返回 0 时才有效。这使调用者负责确保状态栏方向一致。

For compatibility, view controllers that still implement the shouldAutorotateToInterfaceOrientation: method do not get the new

自转行为。(换句话说,它们不会回退到使用应用程序、应用程序委托或 Info.plist 文件来确定支持的方向。)相反,shouldAutorotateToInterfaceOrientation: 方法用于合成将由 supportedInterfaceOrientations 方法返回的信息.

如果您希望整个应用程序旋转,那么您应该将 Info.plist 设置为支持所有方向。现在,如果您希望特定视图仅是纵向的,则必须执行某种子类并覆盖自动旋转方法以仅返回纵向。

请参阅此示例How to force a UIViewController to Portraitorientation in iOS 6

编辑:

解决方案:

@implementation UINavigationController (Rotation_IOS6)

-(BOOL)shouldAutorotate
{
    return [[self.viewControllers lastObject] shouldAutorotate];
}

-(NSUInteger)supportedInterfaceOrientations
{
    return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}

@end
于 2013-01-29T05:32:28.267 回答