2

导航控制器的根视图控制器仅支持纵向,其他控制器支持所有方向。现在,如果我在根视图控制器上并且设备处于横向,并且如果我推动下一个以纵向打开的视图控制器,则应该以横向打开为它支持所有方向。

请帮我解决一下这个。

使用 iPhone 4s iOS6.1.3

4

3 回答 3

1

您可以使用以下代码登录视图控制器后在您的第一个屏幕中检查设备方向:-

-(void)viewWillAppear:(BOOL)animated
    {
        [self willRotateToOrientation:[[UIDevice currentDevice] orientation]];  
        [super viewWillAppear:YES];
    }


- (void)willRotateToOrientation:(UIInterfaceOrientation)newOrientation {
        if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
        {
            if (newOrientation == UIInterfaceOrientationLandscapeLeft || newOrientation == UIInterfaceOrientationLandscapeRight) {

              //set your landscap View Frame
                [self supportedInterfaceOrientations];

            }



        }
        else if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation))
        {
            if(newOrientation == UIInterfaceOrientationPortrait || newOrientation == UIInterfaceOrientationPortraitUpsideDown){
      //set your Potrait View Frame
                [self supportedInterfaceOrientations];

            }
        }
        // Handle rotation
    }

当您加载此视图控制器时,它会首先检查设备方向,然后加载它的相关帧

于 2013-05-23T10:09:12.823 回答
0

我认为这是与 iOS6 中的方向变化有关的问题。你需要子类化UINavigationController

检查这个

于 2013-05-23T10:16:42.837 回答
0

1. 您必须创建 UINavigationController 的子类。添加以下方法.. 取一个布尔变量来检查它是否支持所有方向并更改其值。

 @implementation NavigationControllerViewController

- (BOOL)shouldAutorotate
{
return YES;
}      

- (NSUInteger)supportedInterfaceOrientations
{
AppDelegate *appdelgate=[[UIApplication sharedApplication]delegate];

if (appdelgate.issuppoertAll) {
    // for iPhone, you could also return UIInterfaceOrientationMaskAllButUpsideDown
    return UIInterfaceOrientationMaskAll;

}
return UIInterfaceOrientationMaskPortrait;

  }
 @end

2当您将表单根视图控制器导航到其他视图控制器时

使用此代码,当你想强行改变它的orientation.ie lanscape 到portrait

      obj_viewcontroller        = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    [self presentModalViewController:obj_viewcontroller animated:NO];
    [self dismissModalViewControllerAnimated:NO];

    [self.navigationController pushViewController:obj_viewcontroller animated:NO];

3 在第二个视图控制器中,您必须更改布尔变量值

-(void)viewWillAppear:(BOOL)animated
{
appdelgate.issuppoertAll=YES;
  }

4 将此方法添加到所有视图控制器中,并根据需要设置方向。

- (NSInteger)supportedInterfaceOrientations 
{
return UIInterfaceOrientationMaskPortrait;
 }
于 2013-05-23T10:26:12.200 回答