2

我的应用程序是基于导航的应用程序,它支持 iOS 6。除了视图控制器之外,所有其他应用程序都只支持纵向模式。单独的特定视图控制器必须同时支持横向和纵向。

我搜索了很多关于这个的问题,但没有一个答案适合我。如果有人知道,请指导我

我在 Project -> Targets -> Summary -> Supportedorientation中将方向设置为Portait

4

3 回答 3

7

首先,如果您正在为 iOS6 制作应用程序,您应该使用UIViewController 文档中介绍的 iOS6 方法。类似的方向方法shouldAutorotateToInterfaceOrientation在 iOS6 中已弃用,iOS6 的替代方法是shouldAutoRotate. 如果您的应用也支持 iOS5,您应该只使用旧方法。

其次,如果您UINavigationcontroller在应用程序中使用并且需要具有不同的界面方向,那么 navigationController 可能会弄乱应用程序中的界面方向。可能的解决方案(对我有用)是实现自定义UINavigationController并覆盖该自定义UINavigationController类中的界面方向方法,这将使您的 viewControllers 根据您设置的方向旋转,因为您的控制器是从UINavigationController. 不要忘记在您的特定视图控制器中添加这些方法。

自定义导航控制器.h

@interface CustomNavigationController : UINavigationController
@end

自定义导航控制器.m

@implementation CustomNavigationController

//overriding shouldRotate method for working in navController
-(BOOL)shouldAutorotate
{  
  return   [self.topViewController shouldAutorotate];   
}

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

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
   return [self.topViewController preferredInterfaceOrientationForPresentation];
}
于 2013-04-04T10:33:55.903 回答
0

我真的认为正确的方法是将横向和纵向设置为支持的方向,并且不允许更改您不想旋转的 VC 上的方向,方法是在

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

如果不应该支持传递给该方法的方向。

正如评论中提到的,这种方法不能再使用了。你应该使用:

-(BOOL) shouldAutorotate

并找出此函数中的当前方向,如果您不想旋转,则返回 NO。

于 2013-04-04T10:27:34.180 回答
0

不要忘记让您的应用程序有不同的方向!

否则上面的任何东西都不会起作用

将其设置在部署信息部分下 General 的项目目标中:

在此处输入图像描述

于 2014-03-19T15:35:56.380 回答