Ios UINavigationController设置视图控制器自动旋转问题

Ios UINavigationController设置视图控制器自动旋转问题,ios,uinavigationcontroller,ios7,autorotate,Ios,Uinavigationcontroller,Ios7,Autorotate,我在堆栈中提供了一个带有两个视图控制器的UINavigationController,并首先提供了最后一个视图控制器。点击后退按钮显然会返回到第一个视图控制器 navCtrl = [[UINavigationController alloc] init]; ViewController1 *vc1 = [[ViewController1 alloc] init]; ViewController2* vc2 = [[ViewController2 alloc] init];

我在堆栈中提供了一个带有两个视图控制器的
UINavigationController
,并首先提供了最后一个视图控制器。点击后退按钮显然会返回到第一个视图控制器

    navCtrl = [[UINavigationController alloc] init];
    ViewController1 *vc1 = [[ViewController1 alloc] init];
    ViewController2* vc2 = [[ViewController2 alloc] init];

    [navCtrl setViewControllers:[NSArray arrayWithObjects:vc1, vc2, nil] animated:NO];
    [self presentViewController:navCtrl animated:YES completion:^{
    }];
问题是,当我在横向模式下按下导航控制器上的后退按钮时,view controller vc1帧不正确。框架为(0,0320568),以横向模式布置。我正在运行iOS 7。按下后退按钮时不会调用自动旋转代码

然而,如果我用自然顺序vc1,vc2呈现导航控制器,我看不到任何问题

编辑:仅供参考,以下是vc1中的
-viewwillbeen
-viewdidebeen
调用:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
    [[UIApplication sharedApplication] setStatusBarHidden:NO
                                            withAnimation:UIStatusBarAnimationNone];

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];

    NSLog(@"Frame = %@", NSStringFromCGRect(self.view.frame));
}


我发现了问题。对于一些我不记得的旧iOS bug解决方法,我在viewDidLoad中有以下行


[self.navigationController.view setFrame:[self.navigationController.view-bounds]

这里有几件事需要检查:


你说你已经检查过了,但是为了安全起见-检查视图上的自动调整大小


视图控制器是否实现以下方法

- (NSUInteger)supportedInterfaceOrientations;

是否将导航控制器显示为子视图控制器?执行此操作时,请确保以下方法返回其默认值
YES

- (BOOL)shouldAutomaticallyForwardRotationMethods;

检查是否未将子视图控制器添加到
UINavigationController
的视图中,因为它不会转发外观方法,最好从导航控制器上的视图控制器中处理



如果上述所有操作都失败,您应该在vc1的
视图中将出现一个断点
,并检查其帧,如果帧正确,但
导航控制器。视图
帧不正确,则您必须检查自动调整大小的遮罩。

您能看看我的问题吗:
- (BOOL)shouldAutomaticallyForwardRotationMethods;