2013-03-07 2 views
0

Я пытаюсь скрыть свой NavigationBar и строку состояния (слайд-анимацию), и у меня возникает проблема.Скрытие строки 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) { 

      }]; 
     } 

Есть предложения?

EDIT: Вот что экран выглядит как после relayout Rotation в: Image

+1

Можете ли вы разместить несколько изображений? Не совсем понятно, в чем проблема. Когда вы говорите «отбрасывает мою анимацию», это анимация navBar, о которой вы говорите? – applefreak

ответ

1

Ты путаешь подразделение экрана в UIView области немного.

Когда вы находитесь в навигации контроллера, есть три вида:

  • Навигационный контроллер в «корень» вид
  • Внутри этого, Панель навигации (что, конечно, является UIView
  • Также внутри навигационный контроллер, вид «области содержимого»

Таким образом, контроллер Nav управляет собственным корневым представлением. В этом он заполняет пространство с помощью NavigationBar вверху, а re й площади с одним большим UIView для контента.

Когда вы нажимаете контроллер вид на навигационном стек, контроллер Nav добавляет ваш взгляд корень как содержание. Таким образом, весь ваш «self.view» полностью содержится в представлении «контент» контроллера Nav.

Итак, когда контроллер Nav скрывает панель навигации ... представление «content» расширяется, чтобы заполнить пробел. А то эта точка зрения говорит ваш вид «эй, там больше места, чем вы используете так ваш вид также расширяется до полного заполнения представление содержимого контроллера Nav в.

Так ваш взгляд в„0“точка всегда верхняя часть вашего представления, которая никогда не меняется. Что меняется, где «верх вашего представления» относится к верхнему краю экрана.

Если вы хотите, чтобы ваш контент оставался в том же месте на экране, когда navbar удаляется, тогда вам придется учитывать тот факт, что ваша «нулевая» точка теперь выше, чем когда была панель навигации, которая выводила содержимое вниз.

+0

То же самое относится к строке состояния iOS: она занимает экранную недвижимость, что делает UIViews ниже ее короче. Когда вы удаляете его, доступное пространство для просмотров становится выше. Вращение вызывает все представления для ретрансляции, поэтому, вероятно, срабатывают изменения, которые адаптируются. –

+0

Это именно то, с чем я имею дело. Любые предложения по управлению этим?Я добавил скриншот о том, что происходит при повороте. Может быть, отключить ретрансляцию? Я не уверен, как определить, когда это произошло, поскольку, если я не вращаюсь, он отлично работает ... – mattsven

Смежные вопросы