如何iOS6和iOS7下隐藏UITabBar

不栽跟头,你就不会进步!

这两天适配iOS6,在UITabBar隐藏后原区域不响应点击事件的问题上裹足不前,异常上火(不用心,就会这样)!

对于iOS7而言,隐藏UITabBar很容易:

self.tabBarController.tabBar.hidden = YES;

然后把self.view的高度加上个tabBar的高度(默认高度49)就ok了,可谓不费吹灰之力!iOS7以下就不行了!

这里有一段代码,iOS6及以上系统都可以用,我就直接粘过来了

  1. -(void)makeTabBarHidden:(BOOL)hide {   
  2.      // Custom code to hide TabBar   
  3.      if ( [tabBarController.view.subviews count] < 2 ) {   
  4.           return;   
  5.      }   
  6.   
  7.      UIView *contentView;     
  8.      if ( [[tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] ) {   
  9.           contentView = [tabBarController.view.subviews objectAtIndex:1];   
  10.      } else {   
  11.           contentView = [tabBarController.view.subviews objectAtIndex:0];   
  12.      }   
  13.   
  14.      if (hide) {   
  15.           contentView.frame = tabBarController.view.bounds;   
  16.      } else {   
  17.           contentView.frame = CGRectMake(tabBarController.view.bounds.origin.x,                  
  18.                                          tabBarController.view.bounds.origin.y,   
  19.                                          tabBarController.view.bounds.size.width,   
  20.                                          tabBarController.view.bounds.size.height -   
  21.                                          tabBarController.tabBar.frame.size.height);   
  22.      }   
  23.   
  24.      tabBarController.tabBar.hidden = hide;   
  25. }  

经检验,可靠可用,再也不用担心iOS6下UITabBar隐藏后该区域还死活不能响应点击事件的问题了!

第一眼看到这段代码时,我是视而不见啊,竟然没去试试,事后,这也令我异常恼火(我想我应该活该)!

我同事试了一下,奏效!悔不当初 .多看一眼 .......

我分析一下这个代码:

在iOS6上,UITabBar位于一个viewController中self.view的上面,你要是用

self.tabBarController.tabBar.hidden = YES;

然后你这样

 [self.tabBarController setTabBarItem:nil];

 甚至你再这样

[self.tabBarController.tabBar removeFromSuperView];

最后你会发现,tabBar所占的区域还是不能响应点击事件,在iOS6上它也就占着茅坑不拉了,你真拿它没招...

所以用上面的代码吧!

不说啥,我只是对这种iOS6上tabBar占着茅坑不拉的行为很愤慨!

说点实用的

话说我这边是写的是一个继承自UITabBarController的一个子类,在viewDidLoad方法中我发现,self.view一开始是有两个subview的,一个就是tabBar,这个货占着self.view下方49的高度,另一个就是contentView(我姑且这么称呼,具体叫啥名估计得问xcode它父亲了).iOS7以下系统中当你把tabBar拿掉后,contentView是不会自动把自己的高度延展的,所以就你就得手动去帮它把tabBar的高度加上去。而iOS7及以上的系统,苹果的开发人员应该帮我们把这活给干了,所以我们隐藏就行了。

我自己的理解,欢迎指正!


代码来自 http://blog.csdn.net/yongyinmg/article/details/40050089




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值