2013-03-23 2 views
0

4 개의보기가있는 UiTabbar 컨트롤러가 있습니다. 나는 또한 내가 탭 바에 추가 한 버튼이있다. 그것은 모달 뷰 컨트롤러를 제공합니다. 내 모달 뷰 컨트롤러의 viewDidAppear 방법에 내가 몇 가지 이유를 들어 다음 코드탭 모양의 탐색보기를 통해 모달보기에서 숨겨진 상태 막대를 보완하는 방법

[self setWantsFullScreenLayout:YES]; 
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:YES]; 

을 가지고, 그것은로드 처음보기 20 PIX를 아래로 이동한다. 보기 컨트롤러를 닫은 다음 다시 표시하면보기가 원하는 위치에 있습니다. 보기가 항상 올바른 위치에 있도록이 코드를 어디에 배치해야합니까?

답변

0

먼저 statusBar가 [[UIApplication sharedApplication] isStatusBarHidden]을 통해 숨겨 졌는지 여부를 확인합니다. 숨겨져 있지 않으면 (== 표시됨) 숨 깁니다. 그렇지 않으면, 그렇지 않으면! 상태가 표시 될 때

  • 는 20 픽셀을 수정하려면 -하지만 네비게이션이 제대로 단지 self.navgigationController.navigationBar.frameorigin.y에 20 점을 추가, 푸시 다운되지 않습니다.

  • 우리가 상태 표시 줄을 감추고 싶을 때 origin.y의 012 점을 제거하면 일 뿐이므로 0으로 남겨 두십시오.

나는 또한 당신과 같은 문제가 발생하고, 여기 당신이 원하는대로 내 샘플 코드는, 당신이 그것을 구성 할 수있다

:

@implementation SomeViewController { 
    BOOL isStatusBarEnabled; 
} 

// ... 

- (void)toggleStatusBar 
{ 
    UINavigationBar *navBar = self.navigationController.navigationBar; 

    if ([[UIApplication sharedApplication] isStatusBarHidden]) { 

     // Change to regular mode 
     // Show status bar 
     [[UIApplication sharedApplication] setStatusBarHidden:NO 
               withAnimation:UIStatusBarAnimationSlide]; 
     [UIView animateWithDuration:0.3 
         animations:^{ 
          navBar.frame = CGRectMake(navBar.frame.origin.x, 20, navBar.frame.size.width, navBar.frame.size.height); 
         } completion:nil]; 

    } else if (![[UIApplication sharedApplication] isStatusBarHidden]) { 
     // Change to fullscreen mode 
     // Hide status bar 
     [[UIApplication sharedApplication] setStatusBarHidden:YES 
               withAnimation:UIStatusBarAnimationSlide]; 
     [UIView animateWithDuration:0.4 
         animations:^{ 
          navBar.frame = CGRectMake(navBar.frame.origin.x, 0, navBar.frame.size.width, navBar.frame.size.height); 
         } completion:nil]; 
    } 

} 

// ... 

... 다음, 내 경우에는, 내가 설정을 사용자가 상태 표시 줄 보이기/가리기 토글을 선택할 수있게 해주는 키.

// ... 

- (void)onDefaultsChanged:(NSNotification*)aNotification 
{ 

    NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; 
    isStatusBarEnabled = [standardDefaults boolForKey:kStatusBar]; 

    if (isStatusBarEnabled) { 

     if ([[UIApplication sharedApplication] isStatusBarHidden]) { 

      // Change to regular mode 
      // Show status bar 
      [self toggleStatusBar]; 

    } else { 

     // Change to fullscreen mode 
     // Hide status bar 
     [self toggleStatusBar]; 

    } 

    // ... 
} 

그게 전부 야!