iphone容器控制器定位错误

时间:2012-06-01 19:40:32

标签: iphone uiviewcontroller orientation

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

当在控制器之间切换时,前一个控制器往往会在切换回时停留在它停止的任何方向。

orientation bug

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

  1. 当呈现容器控制器时,我旋转到横向。 此时一切看起来都很好。
  2. 通过分段控件切换到子控制器#2。
  3. 在此视图中旋转回横向。一切看起来都很正常。
  4. 切换回子控制器#1。
  5. 在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将自动处理所有这些。有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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