2013-02-05 86 views
0

導航欄這是我的問題....如何停止的狀態欄覆蓋iOS6的

enter image description here

這種情況發生時:

  1. 狀態欄淡出使用按鈕。
  2. 從風景向顛倒的風景旋轉180度。
  3. 使用該按鈕,狀態欄會淡入。 - 它現在覆蓋導航欄。

的按鈕代碼來切換狀態欄能見度:

- (IBAction)toggleBar:(id)sender 
{ 
    NSLog(@"View Frame : %@", NSStringFromCGRect(self.view.frame)); 

    // Toggle status bar visiblity 
    BOOL isStatusBarHidden = [[UIApplication sharedApplication] isStatusBarHidden]; 
    [[UIApplication sharedApplication] setStatusBarHidden:!isStatusBarHidden 
              withAnimation:UIStatusBarAnimationFade]; 
} 

視圖總是報告其幀爲480 * 288。

的問題是可以解決的在iOS 5使用哈克解決方法通過停止填充空間的旋轉。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    if ([[UIApplication sharedApplication] isStatusBarHidden]) 
    { 
     float oldAlpha = self.navigationController.navigationBar.alpha; 
     self.navigationController.navigationBar.alpha = 0.01; 
     [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; 

     double delayInSeconds = 0.0; 
     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
      self.navigationController.navigationBar.alpha = oldAlpha; 
      [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; 
     }); 
    } 

    return UIInterfaceOrientationIsLandscape(interfaceOrientation); 
} 

這不適用於iOS 6,因爲shouldAutorotateToInterfaceOrientation未被調用。但是,使用其替代品:willRotateToInterfaceOrientation也無濟於事。有任何想法嗎?狀態欄切換

+0

更換爲'shouldAutorotateToInterfaceOrientation'不是'willRotateToInterfaceOrientation'。它是'supportedInterfaceOrientations'。 – rmaddy

+0

@rmaddy同意,但在iOS 5中它有一個目的 - 讓你知道它即將旋轉屏幕。 – Robert

+0

這是不正確的。對'shouldAutorotateToInterfaceOrientation'的調用永遠不會表明視圖控制器即將旋轉。其目的是要問是否允許某些旋轉。 'willRotateToInterfaceOrientation'方法用於指示旋轉實際上即將發生。請記住,這些方法是關於視圖控制器,而不是屏幕。 – rmaddy

回答

0

後,重新設置你的self.view.frame。

+0

這沒有奏效。該框架總是報告爲480 x 268(旋轉/轉動狀態欄之前/之後)。設置框架不起作用。謝謝你的回答。 – Robert

+0

你檢查過我的另一個解決方案嗎? –

0

在iOS6的,你應該使用這些方法。檢查出來。

- (BOOL)shouldAutorotate 
{ 
    //returns true if want to allow orientation change 
    return TRUE; 
} 
- (NSUInteger)supportedInterfaceOrientations 
{ 
    //decide number of origination tob supported by Viewcontroller. 
    return UIInterfaceOrientationMaskAll; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    //from here you Should try to Preferred orientation for ViewController 
} 
+0

我希望這個解決方案能夠工作:) –

0

好答案是使用相同的破解上willRotateToInterfaceOrientation我說這不會在我的問題的工作,但我只是試圖再次和它的伎倆。

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    if ([[UIApplication sharedApplication] isStatusBarHidden]) 
    { 
     [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; 

     double delayInSeconds = 0.0; 
     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
      [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; 
     }); 
    } 
} 
0

後我打電話

dismissViewControllerAnimated

該方法中,然後調用

[[UIApplication的sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];

這個問題出現。

當我打電話給 [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];第一,沒問題。