如何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. UIView *contentView;
  7. if ( [[tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] ) {
  8. contentView = [tabBarController.view.subviews objectAtIndex:1];
  9. } else {
  10. contentView = [tabBarController.view.subviews objectAtIndex:0];
  11. }
  12. if (hide) {
  13. contentView.frame = tabBarController.view.bounds;
  14. } else {
  15. contentView.frame = CGRectMake(tabBarController.view.bounds.origin.x,
  16. tabBarController.view.bounds.origin.y,
  17. tabBarController.view.bounds.size.width,
  18. tabBarController.view.bounds.size.height -
  19. tabBarController.tabBar.frame.size.height);
  20. }
  21. tabBarController.tabBar.hidden = hide;
  22. }

经检验,可靠可用,再也不用担心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

时间: 2024-08-03 15:38:23

如何iOS6和iOS7下隐藏UITabBar的相关文章

iOS7下隐藏status bar的详细研究

info.plist文件中,View controller-based status bar appearance项设为YES,则View controller对status bar的设置优先级高于application的设置.为NO则以application的设置为准,view controller的prefersStatusBarHidden方法无效,是根本不会被调用的. 1.View controller-based status bar appearance设为YES. 这时 view

iOS7下隐藏statusbar的详细研究--转

info.plist文件中,View controller-based status bar appearance项设为YES,则View controller对status bar的设置优先级高于application的设置.为NO则以application的设置为准,view controller的prefersStatusBarHidden方法无效,是根本不会被调用的. 一.如果View controller-based status bar appearance 设为YES.这时 vie

iOS7下隐藏statusbar

info.plist文件中,View controller-based status bar appearance项设为YES,则View controller对status bar的设置优先级高于application的设置.为NO则以application的设置为准,view controller的prefersStatusBarHidden方法无效,是根本不会被调用的. 一.如果View controller-based status bar appearance 设为YES. 这时 vi

iOS6和iOS7环境下微信登录未显示问题&amp;微信IOS的SDK:isWXAppInstalled总是返回NO和nil

一.问题描述: iOS6和iOS7 环境下未显示微信登录界面,在其他环境下显示正常. 二.问题解决: iOS6和7未出现微信登录按钮, 原因 [WXApi isWXAppInstalled] 返回nil和NO: if ([WXApi isWXAppInstalled]) { ... } 修改为如下判断URL: if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin://"]]) {

iOS7下status bar相关问题的解决方法

转载自:http://blog.csdn.net/volcan1987/article/details/14227313 iOS7里status bar的实现跟iOS6下有写不一样,前段时间碰到了这个问题,今天总结下 首先网上有很多解决办法,但是有些我觉得并没有按照苹果的思路来,比如把UIViewControllerBasedStatusBarAppearance在plist里设置为NO的方法,这个方法的确可行,但是并不是一个“正确”的思路,而且会有些问题,比如,当你在某个界面隐藏了status

简单的IOS6和IOS7通过图片名适配

在美工提供图片图片的前提下,只需要下面给UIImage做一个分类,就可以简单的实现在6和7上的图片名字适配. 比如美工在6上面提供的图片叫common_button_big_red_highlighted.png,7上的名字[email protected],通过下面的简单代码就可以实现6和7的图片适配,而且在调用的时候十分方便,只需要通过[UIImage imageWithNamed:]就可以,跟体统自带的[UIImage imageNamed:]类似: + (UIImage *)imageW

[IOS_HTML5]IOS7下HTML5的各种坑

 这些天 Apple 已经推出了 iOS 7 以及 iPhone 5S 和 iPhone 5C .Apple 面向 web 开发者仅仅发布了 10% 的所需信息,我可以说这是自 1.0 以来,bug 最多的 Safari 版本嘛.文本我将介绍新的 API 和特性,以及如果你有网站或 webapp ,马上需要处理的大多数问题. 简而言之 没有时间读这篇长文? UI 变化:工具栏色彩,新的全屏导航问题,新的主屏图标尺寸:iPhone 未使用 <title>:可能与新手势冲突. 新设备:对 web

iOS6和iOS7代码的适配(1)——坐标适配

由于iOS7里面status bar和视图是重叠在一起了,所以应用的y坐标就没法和以前一致了,需要重新计算设定.基本上,你的应用用Xcode5运行一下就能看见这个问题,这里写了一个最简单的例子,一个View上加了一个Label控件,分别在iOS6和iOS7的模拟器上的样子. 从图上明显可以看到,iOS7上的应用y坐标起始计算点是从屏幕顶点算起,而iOS6是从status bar来算起,这个原因是导致一切问题的根源. 好了,找到了问题就好办,我列举一下看到过的尝试过的方法: 1. 修改window

iOS6和iOS7代码的适配(3)——坐标适配

由于iOS7里面status bar和视图是重叠在一起了,所以应用的y坐标就没法和以前一致了,需要重新计算设定.基本上,你的应用用Xcode5运行一下就能看见这个问题,这里写了一个最简单的例子,一个View上加了一个Label控件,分别在iOS6和iOS7的模拟器上的样子. 从图上明显可以看到,iOS7上的应用y坐标起始计算点是从屏幕顶点算起,而iOS6是从status bar来算起,这个原因是导致一切问题的根源. 好了,找到了问题就好办,我列举一下看到过的尝试过的方法: 1. 修改window