如何允许特定视图控制器支持横向和纵向方向

时间:2013-04-04 10:21:30

标签: iphone ios objective-c orientation uiinterfaceorientation

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

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

我在Project中将方向设置为 Portait - >目标 - >摘要 - >支持的方向

3 个答案:

答案 0 :(得分:6)

首先,如果要为iOS6制作应用程序,则应该使用UIViewController documentation中提供的iOS6方法。在iOS6中不推荐像shouldAutorotateToInterfaceOrientation这样的方向方法,iOS6的替代方法是shouldAutoRotate。如果您的应用也支持iOS5,则应该只使用旧方法。

第二个如果您在应用程序中使用UINavigationcontroller并且需要具有不同的界面方向,那么navigationController可能会破坏应用程序中的界面方向。可能的解决方案(对我有用)是实现自定义UINavigationController并覆盖该自定义UINavigationController类中的界面方向方法,这将使您的viewControllers根据您设置的方向旋转,因为您的控制器被推送来自UINavigationController。不要忘记在特定的viewController中添加这些方法。

<强> CustomNavigationController.h

@interface CustomNavigationController : UINavigationController
@end

<强> CustomNavigationController.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];
}

答案 1 :(得分:0)

我真的认为这样做的正确方法是将横向和纵向设置为支持的方向,并且不允许通过返回NO来改变VC不想旋转的方向。 p>

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

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

如评论中所述,此方法无法再使用。你应该使用:

-(BOOL) shouldAutorotate

找出此功能内的当前方向,如果不想旋转则返回NO。

答案 2 :(得分:0)

不要忘记允许您的应用程序使用不同的方向!

否则上面的任何内容都不起作用

在“部署信息”部分的“常规”项目目标中设置它:

enter image description here