4

我有两个视图控制器,A 和 B。A 仅支持纵向,而 B 可以支持横向。我正在使用包含 API 显示 B。

 [self addChildViewController:child];
[self.view addSubview:child.view];
child.view.frame = self.view.bounds;
[child didMoveToParentViewController:self];

我已经实施

 - (BOOL)shouldAutorotate
{
    UIViewController *current = _presentingChild ? _child : self;
    return [current shouldAutorotate];
}

- (NSUInteger)supportedInterfaceOrientations
{
    UIViewController *current = _presentingChild ? _child : self;
    return [current supportedInterfaceOrientations];
}

一切都像魅力一样。如果设备在呈现 A 时是横向的,而我呈现 B 时,旋转会立即转动。

当我解雇 B 时问题就来了。如果设备是横向的,A 会显示为横向(这不应该发生)。

你有建议如何面对这个问题吗?我知道我可以使用模态控制器,这将解决问题。但我不想在这种特定情况下使用模态 vc。

4

1 回答 1

1

如果我理解正确,shouldAutorotateandsupportedInterfaceOrientations方法位于 A 视图控制器中,其中包含 B 视图控制器。

如果我是对的,那么您实现这两种方法的方式很糟糕:当当前视图控制器为 self 时(如果 _presentingChild 条件为 false),您应该有一个无限递归,因为例如, shouldAutorotate 将被递归调用而没有结束(你回来了[self shouldAutorotate])。

因此,如果您没有遇到无限递归,则只有两种可能性:

  • 这两种方法永远不会被调用
  • _presentingChild 条件始终为真

检查并告诉我

于 2013-05-29T18:59:22.707 回答