我在通用应用程序中工作,直到 ios 5 都可以正常工作,但在 ios 6 中存在方向问题。我的应用程序仅处于纵向模式。问题是当我的 ipad 处于横向模式时,如果我启动我的应用程序,则方向不会更改为 protrait。所以请帮助我一些代码,以便我在应用程序启动之前强制我的应用程序处于 protrait 模式,仅独立于设备的方向
3 回答
首先,我们必须在 Targets->Summary... 中设置支持的方向。
在 iOS6.0 中 shouldAutorotateToInterfaceOrientation 方法已被弃用。所以,我们必须使用 shouldAutorotate 方法来代替这个方法。
使用supportedInterfaceOrientations方法,如果我们想要所有方向,我们必须设置我们想要的方向,比如UIInterfaceOrientationMaskAll
发生这种情况是因为 Apple 改变了管理 UIViewController 的方向的方式。在 iOS6 中,Oreintation 处理方式不同。在 iOS6 中容器(例如 UINavigationController)不会咨询它们的子级来确定它们是否应该自动旋转。默认情况下,应用程序和视图控制器支持的界面方向设置为 iPad 惯用语的 UIInterfaceOrientationMaskAll 和 iPhone 惯用语的 UIInterfaceOrientationMaskAllButUpsideDown 。因此,设备在默认情况下会更改方向。
所以需要执行一些步骤。
1 - 从这里设置方向
2 - 将此代码放在添加到 RootViewController 的 FirstViewController 中
@implementation UINavigationController (RotationIn_IOS6)
//Here UINavigationController is the RootViewController added To the Window
-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
@end
** 将以下方法放入 ViewController 中,IOS6 中引入 Allow Oreintation Change **
- (BOOL)shouldAutorotate
{
return NO;
}
/*Return the Number of Oreintation going to supported in device*/
- (NSUInteger)supportedInterfaceOrientations
{
return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown );
}
// Returns interface orientation masks.
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return (UIInterfaceOrientationPortrait | UIInterfaceOrientationPortraitUpsideDown ) ;
}
在你的ViewController.m
你将不得不定义你支持的方向。在 IOS 6 中,这是处理支持的方向的方法。
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskAll;
}
UIInterfaceOrientationMaskAll
意味着它将支持view
.
另请阅读 Apple Doc - Doc about Orientation