2012-06-01 75 views
1

我的容器控制器的方向有問題。iphone容器控制器定位錯誤

在控制器之間切換時,前一個控制器傾向於停留在切換回來時停留的任何方向。

orientation bug

首先,我使用以下步驟來再現:

  1. 當被呈現在容器控制器I旋轉爲橫向。 在這一點上,一切看起來都很好。
  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會自動採取所有這一切的照顧。有誰知道我做錯了什麼?

回答

2

一個快速的解決辦法是添加以下行transtionFromViewController函數被調用

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

在此之前應該設置框,在新視圖中正確

+0

哇,這比我認爲會更明顯。我認爲這隻會調整框架而不重繪內容。 –

1

我喜歡奧馬爾Abdelhafith的答案。雖然它會設置框架,但它可能不會將視圖旋轉到所需的方向。你將不得不爲此測試。還可以做的是檢查狀態欄的方向。然後調用發送狀態欄方向的willRotateToOrientation方法。我希望這也有幫助。

+0

讓我吃驚的是@Omar Abdelhafith的回答確實旋轉了這個觀點。但無論如何這都是有用的信息。 –