模态视图阻止其他视图旋转

我在我的MainViewController中有这个方法:

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { NSLog(@"MAIN CONTAINER WILL ANIMATE"); [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; } 

当我旋转时,NSLog显示出来,而且一切都很完美。 但是,如果我从我的MainViewController呈现一个modalViewController,然后我旋转,NSLog不再出现,我的MainViewController永远不知道该设备被旋转,所以当modalView被解散,接口不调整旋转。

任何想法,为什么模态视图可以防止父母接收轮换更新? 这是典型的,还是必须有我的设置有问题?

只是为了确保,我试着通过[mainViewController.view addSubview:modalView.view]将modalViewController作为子视图呈现,并且旋转更新正常生效。 只有当我做[mainViewController presentModalViewController:modalViewController]; 更新不会生效。

当然,当视图控制器以模态方式呈现时,其他视图控制器根本不会收到任何消息。 这就是这种情况下的模态。

显而易见的解决scheme是检查无模式视图控制器的viewWillAppear方法中的方向。

你必须检查执行:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Overriden to allow any orientation. return YES; } 

在这两个视图。

您需要在viewWillAppear中将布局调整为当前的界面方向。 显然,由于视图是不可见的,所以当模态视图控制器启动时,animation函数将不会被调用。