我有一个要以纵向模式显示的应用程序。但我只想在两种模式下显示一个视图。
我已经为 iOS5 做了这个。但在 iOS6 中,我无法做到这一点。
我也尝试了很多代码来解决它。
我在我的应用程序中使用导航并且在 ios6 中无法在两种模式下仅旋转一个视图。您要么固定旋转以查看视图,要么旋转整个应用程序。我对吗?
我怎么解决这个问题?
我有一个要以纵向模式显示的应用程序。但我只想在两种模式下显示一个视图。
我已经为 iOS5 做了这个。但在 iOS6 中,我无法做到这一点。
我也尝试了很多代码来解决它。
我在我的应用程序中使用导航并且在 ios6 中无法在两种模式下仅旋转一个视图。您要么固定旋转以查看视图,要么旋转整个应用程序。我对吗?
我怎么解决这个问题?
在 ios6 中,您是否尝试在 plist 中使用此功能,如下图所示:-
你也可以在 xcode->projectname->summary 中设置:-
来自 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