0

Я пытаюсь скрыть UITabBarController и UINavigationController одновременно, когда кнопка нажата. Я нашел очень хороший фрагмент кода здесь How to hide uitabbarcontroller, но у меня проблема при попытке скрыть и оживить как UINavigationController, так и tabbarcontroller. Я также нашел много примеров в Интернете, когда они скрывают табуляцию, используя self.tabBarController.tabBar.hidden = YES, но только скрывает элементы кнопки, а не черную полосу внизу.Скрыть как контроллер навигации, так и панель управления панелью с анимацией

После того, как я много играл, я могу сделать так, чтобы сделать оба анимата правильно, потому что я думаю, что это связано с укрытием навигационного контроллера, который позволяет изменять размер всего окна на лету.

-(IBAction)touchImage:(id)sender { 

    if (isImageFullScreen) { 

     isImageFullScreen = NO; 

     [self.navigationController setNavigationBarHidden:NO animated:YES]; 
     [UIView transitionWithView:self.view 
          duration:0.5 
          options:UIViewAnimationOptionCurveLinear 
         animations:^ 
     { 
      hotelImageButton.frame = CGRectMake(0,20,320,92); 
      [self showTabBar:self.tabBarController]; 
     } 
         completion:^(BOOL finished) 
     { 
     }]; 

    } else { 

     isImageFullScreen = YES; 

     [self.navigationController setNavigationBarHidden:YES animated:YES]; 
     [UIView transitionWithView:self.view 
          duration:0.5 
          options:UIViewAnimationOptionCurveLinear 
         animations:^ 
     { 
      hotelImageButton.frame = CGRectMake(0,0,320,480); 
      [self hideTabBar:self.tabBarController]; 
     } 
         completion:^(BOOL finished) 
     {         
     }]; 
    } 

}

Методы hideTabBar и showTabBar являются те из другого поста я связан выше.

Я также пробовал некоторые другие комбинации, но я не могу заставить его выглядеть хорошо. Есть идеи?

Заранее спасибо.

ответ

5

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

[UIView setAnimationDuration:0.2];

Надеется, что работает.

РЕДАКТИРОВАТЬ: Попробуйте этот код, он изменит размер родительского представления на более крупную в 1 транзакции анимации таким образом, что только строки будут скрыты и содержимое будет показано.

- (IBAction)TestButton1:(UIButton *)sender { 

if(!isAnimating){ 
    if(isTabBarAndNavBarHidden){ 

     [UIView transitionWithView:self.view 
          duration:0.5 
          options:UIViewAnimationOptionTransitionNone 
         animations:^ 
     { 
      isAnimating=YES; 

      CGFloat statusBar_height=[[UIApplication sharedApplication] statusBarFrame].size.height; 
      CGFloat screen_height=[UIScreen mainScreen].bounds.size.height; 

      [self.tabBarController.view setFrame:CGRectMake(self.tabBarController.view.frame.origin.x, 0, self.tabBarController.view.frame.size.width, screen_height)]; 
      [self.navigationController.navigationBar setFrame:CGRectMake(self.navigationController.navigationBar.frame.origin.x, statusBar_height, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height)]; 
     } 
         completion:^(BOOL finished) 
     { 
      isTabBarAndNavBarHidden=NO; 
      isAnimating=NO; 
     }]; 

    }else{ 

     [UIView transitionWithView:self.view 
          duration:0.5 
          options:UIViewAnimationOptionTransitionNone 
         animations:^ 
     { 
      isAnimating=YES; 

      CGFloat statusBar_height=[[UIApplication sharedApplication] statusBarFrame].size.height; 
      CGFloat screen_height=[UIScreen mainScreen].bounds.size.height; 

      [self.tabBarController.view setFrame:CGRectMake(self.tabBarController.view.frame.origin.x, statusBar_height-self.navigationController.navigationBar.frame.size.height, self.tabBarController.view.frame.size.width, screen_height+self.navigationController.navigationBar.frame.size.height+self.tabBarController.tabBar.frame.size.height-statusBar_height)]; 
      [self.navigationController.navigationBar setFrame:CGRectMake(self.navigationController.navigationBar.frame.origin.x, 0, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height)]; 


     } 
         completion:^(BOOL finished) 
     { 
      isTabBarAndNavBarHidden=YES; 
      isAnimating=NO; 
     }]; 

    } 
} 

}

+0

Но кроме того, разве вы не получаете странную анимацию? Бар перемещается странно. Как и все на дно, появляясь наполовину вниз, а затем оживляя. – Chompas

+0

Нет, он работает так, как ожидалось для меня. Он работает для вас, если вы скрываете только панель или навигационную панель? –

+0

Это работает, если я скрываю только табуляцию. Проблема заключается в попытке скрыть оба. – Chompas

0

Этот код для iPhone 4/4S.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (self.lastContentOffset > scrollView.contentOffset.y) 
    { 
      NSLog(@"Scrolling up"); 

     [UIView animateWithDuration:.5 delay:0.0 options:UIViewAnimationOptionCurveEaseIn animations:^{ 



      [self.tabBarController.tabBar setFrame:CGRectMake(0, 430, 320, 50)]; 
      [self.navigationController.navigationBar setFrame:CGRectMake(0, 20, self.navigationController.navigationBar.frame.size.width,self.navigationController.navigationBar.frame.size.height)]; 

      } completion: 
      ^(BOOL finished) { 

       [UIView animateWithDuration:.5 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{ 


         } completion:^(BOOL finished) { 
           // 
         }]; 

      }]; 

    } 
    else if (self.lastContentOffset < scrollView.contentOffset.y) 
    { 
     [UIView animateWithDuration:.5 delay:0.0 options:UIViewAnimationOptionCurveEaseIn animations:^{ 
       [self.navigationController.navigationBar setFrame:CGRectMake(0, -60, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height)]; 
      [self.tabBarController.tabBar setFrame:CGRectMake(0, 480, 320, 50)]; 


     } completion: 
     ^(BOOL finished) { 

      [UIView animateWithDuration:.5 delay:2.0 options:UIViewAnimationOptionCurveEaseIn animations:^{ 

      } completion:^(BOOL finished) { 

      }]; 

     }]; 



     NSLog(@"Scrolling Down"); 

    } 

    self.lastContentOffset = scrollView.contentOffset.y; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.tabBarController.tabBar setFrame:CGRectMake(0, 430, 320, 50)]; 
    [self.navigationController.navigationBar setFrame:CGRectMake(0, 20, self.navigationController.navigationBar.frame.size.width,self.navigationController.navigationBar.frame.size.height)]; 



    // Do any additional setup after loading the view. 
}