1

我的容器控制器的方向有问题。

在控制器之间切换时,前一个控制器倾向于保持在您切换回来时停止的任何方向。

方向错误

首先,我用来重现的步骤:

  1. 当容器控制器出现时,我旋转到横向。此时,风景中的一切看起来都很好。
  2. 通过分段控制切换到子控制器#2。
  3. 在此视图中旋转回横向。一切看起来仍然正常。
  4. 切换回子控制器 #1。

在 ContainerController 的 viewDidLoad 中:

self.child1 = [self.storyboard instantiateViewControllerWithIdentifier:@"first"];
self.child2 = [self.storyboard instantiateViewControllerWithIdentifier:@"second"];

[self addChildViewController:self.child1];
[self addChildViewController:self.child2];

[self.view addSubview:self.child1.view];

我如何转换子控制器:

- (IBAction)segmentChanged:(id)sender
{
    UIViewController *toVc, *fromVc;
    UISegmentedControl *segment = sender;

    if (segment.selectedSegmentIndex == 0)
    {
        toVc = self.child1;
        fromVc = self.child2;  
    }
    else
    {
        toVc = self.child2;
        fromVc = self.child1;
    }

    [toVc willMoveToParentViewController:self];
    [self transitionFromViewController:fromVc 
                      toViewController:toVc 
                              duration:0.0
                               options:UIViewAnimationOptionTransitionNone 
                            animations:nil
                            completion:^(BOOL finished){
                                [toVc didMoveToParentViewController:self];
                            }];
}

我曾假设 transitionFromViewController 会自动处理所有这些。有谁知道我做错了什么?

4

2 回答 2

2

一个快速的解决方案是在调用 transtionFromViewController 函数之前添加以下行

toVc.view.frame = self.view.bounds;

这应该正确设置新视图中的框架

于 2012-06-01T19:54:56.940 回答
1

我喜欢 Omar Abdelhafith 的回答。虽然它会设置框架,但它可能不会将视图旋转到所需的方向。您将不得不对此进行测试。还可以做的是检查状态栏的方向。然后调用 willRotateToOrientation 方法发送状态栏的方向。我希望这也有帮助。

于 2012-06-02T03:09:29.300 回答