多层界面之间显示与隐藏tabBar

时间:2023-03-08 22:23:02

IOS中多层界面之间显示与隐藏tabBar?

在做项目的时候,遇到了一个难题,使用hidesBottomWhenPushed=YES属性设置,可以让本级界面及其以后界面都隐藏,但是根据项目

需求,在第4层是需要显示标签栏的。

于是想了很多的办法,每个要显示的push的界面前都加了hidesBottomWhenPushed=YES,要隐藏的push的界面都加了hidesBottomWhenPushed=NO,

但是一样不好使。

手动调用self.tabbarchontroller.tabbar.hiden =YES,这样写可以隐藏标签栏的项,但是上面有一层白色的空白视图占着,一样没有解决问题。


最后想到了修改标签栏的Frame的方法来解决,果真能行。

我把下面的代码写到了项目中所有视图控制器的父类中:(记得暴露出这两个方法,让子类调用)
  1. #pragma mark - 隐藏TabbBar
  2. - (void)hideTabbar {
  3. if (_originY + 49 == fabs(self.tabBarController.tabBar.frame.origin.y)) {
  4. return ;
  5. }
  6. for (UIView *v in [self.tabBarController.view subviews]) {
  7. if ([v isKindOfClass:[UITabBar class]]) {
  8. [UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){
  9. CGRect frame = v.frame;
  10. frame.origin.y += 49.0f;
  11. v.frame = frame;
  12. NSLog(@"tabBar originY: %f", frame.origin.y);
  13. } completion:nil];
  14. else {
  15. [UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){
  16. CGRect frame = v.frame;
  17. frame.size.height += 49.0f;
  18. v.frame = frame;
  19. } completion:nil];
  20. }
  21. }
  22. return;
  23. }
  24. #pragma mark - 显示TabBar
  25. - (void)showTabBar {
  26. if (_originY == fabs(self.tabBarController.tabBar.frame.origin.y)) {
  27. return ;
  28. }
  29. for (UIView *v in [self.tabBarController.view subviews]) {
  30. if ([v isKindOfClass:[UITabBar class]]) {
  31. [UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){
  32. CGRect frame = v.frame;
  33. frame.origin.y -= 49.0f;
  34. v.frame = frame;
  35. } completion:nil];
  36. else {
  37. [UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){
  38. CGRect frame = v.frame;
  39. frame.size.height -= 49.0f;
  40. v.frame = frame;
  41. } completion:nil];
  42. }
  43. }
  44. return;
  45. }

=================================================

欢迎学习本文,未经许可,禁止转载!