2013-03-07 3 views
0

내 탐색 표시 줄과 상태 표시 줄 (슬라이드 위로 애니메이션)을 숨기려고하고 있는데 문제가 있습니다.UINavigationBar 및 상태 표시 줄 문제 숨기기

상태 표시 줄이 보이면 0 점 (x : 0)에있는 모든 요소의 원점은 상태 표시 줄 바로 아래를 의미합니다. 그러나 상태 표시 줄이 숨겨지면 0 (x : 0) 지점이 새 공간에 맞게 업데이트되고 0 (x : 0)은 화면의 절대 상단을 의미합니다.

나는 상태 표시 줄을 숨기고 가로로 회전 할 때 뷰 autosizes 및 모든 상태 표시 줄의 공간을 사용하는 이동, 내 애니메이션 오프가 발생한다 :

if (![[UIApplication sharedApplication] isStatusBarHidden]) { 
      // Change to fullscreen mode 
      // Hide status bar and navigation bar 
      [[UIApplication sharedApplication] setStatusBarHidden:YES 
                withAnimation:UIStatusBarAnimationSlide]; 
      [UIView animateWithDuration:animationDuration animations:^{ 
       navBar.frame = CGRectMake(navBar.frame.origin.x, 
              -navBar.frame.size.height-20, 
              navBar.frame.size.width, 
              navBar.frame.size.height); 
      } completion:^(BOOL finished) { 
       [navBar setHidden:TRUE]; 
      }]; 
     } else { 
      // Change to regular mode 
      // Show status bar and navigation bar 

      [navBar setHidden:FALSE]; 

      [[UIApplication sharedApplication] setStatusBarHidden:NO 
                withAnimation:UIStatusBarAnimationSlide]; 
      [UIView animateWithDuration:animationDuration animations:^{ 
       navBar.frame = CGRectMake(navBar.frame.origin.x, 
               0, 
               navBar.frame.size.width, 
               navBar.frame.size.height); 
      } completion:^(BOOL finished) { 

      }]; 
     } 

어떤 제안?

편집 : 여기에 화면이 회전의 레이아웃 작업 후 모습입니다 : Image

+1

이미지를 게시 할 수 있습니까? 그것은 당신의 문제가 무엇인지 명확하지 않습니다. "내 애니메이션을 던집니다"라고 말하면, 네가 말하는 navBar의 애니메이션인가? – applefreak

답변

1

당신은 UIView의 영역으로 약간 화면의 하위 구분을 혼동하고 있습니다. 당신이 탐색 컨트롤러에있을 때

는 세 가지보기가 있습니다 : 그 내부

  • 네비게이션 컨트롤러의 "루트"보기
  • 물론
  • 또한 내부의 UIView 인 내비게이션 바 (내비게이션 컨트롤러, "콘텐트 영역"보기

그래서 내비게이션 컨트롤러는 자신의 루트보기를 관리하고 있습니다. 즉, 맨 위에있는 NavigationBar로 공간을 채우고 있고, st에 콘텐츠 용으로 하나의 큰 UIView가 있습니다.

당신이 탐색 스택에 당신의 뷰 컨트롤러를 밀어

은 탐색 컨트롤러는 내용으로 루트보기를 추가하고있다. 따라서 전체 "self.view"는 Nav 컨트롤러의 "content"보기에 완전히 포함되어 있습니다.

물론 탐색기 컨트롤러가 탐색 모음을 숨기면 ... "콘텐츠"보기가 공간을 채우기 위해 확장됩니다. 그리고 그보기 당신의보기 "당신이 그렇게 사용하고 당신의보기도 완전히 탐색 컨트롤러의 내용보기를 채우기 위해 확장보다 이봐, 더 많은 공간이있다.

그래서보기의"알 0 "점은 항상 변경되지 않는 것은 변경되지 않습니다. "보기의 상단"이 화면의 상단 가장자리를 기준으로하는 위치입니다.

탐색 표시 줄에서 콘텐츠가 화면의 같은 지점에 유지되도록하려면 콘텐츠 뷰를 푸시하는 탐색 막대가있을 때보 다 "0"점이 더 높다는 사실을 설명해야합니다.

+0

iOS 상태 표시 줄에도 동일하게 적용됩니다. UIView를 그 아래로 짧게 만드는 화면 영역을 차지합니다. 제거하면보기에 사용할 수있는 공간이 커집니다. 회전하면 모든 뷰가 다시 레이아웃되므로 해당 변경이 적응 중일 수 있습니다. –

+0

이것은 내가 다루고있는 문제입니다. 그것을 관리하는 방법에 대한 제안?회전 할 때 일어나는 일의 스크린 샷을 추가했습니다. 어쩌면 릴레이 아웃을 비활성화 할 수 있을까요? 회전하지 않는 한 문제가 발생했을 때이를 감지하는 방법을 잘 모르겠습니다. – mattsven

관련 문제