当页面使用 UITabBarController + UINavigationController 框架的时候,当跳转到详情页面的时候,如果 UITabBar 仍然存在的话就会造成逻辑混乱,用户体验也会下降,因此我们就有一个在详情页将 UITabBar 隐藏的需求,当然,在其他的一些情况也可能有隐藏 UITabBar 的需求, 在这里小编为大家介绍三种隐藏 UITabBar 的方法,大家可以根据详细的需求进行选择。

1、第一种:

 直接隐藏当前页面的 UITabBar

// 显示tabBar
self.tabBarController.tabBar.hidden = NO;
// 隐藏tabBar
self.tabBarController.tabBar.hidden = YES;

2、第二种:

 将 push 到的页面的 UItabBar 隐藏

// 在push跳转时隐藏tabBar
UIViewController *vc2 = [UIViewController new];
vc2.hidesBottomBarWhenPushed = YES;
[vc1 pushViewController:vc2 animated:YES];

 该方法在push页面的时候使用,有一定的局限性,根据其名字可以发现,只有在 push跳转的时候才会生效,也就是说在 UITabBarController 和 UINavigationController 结合使用的时候能用。

 这也正是小编子在开篇时提到的那种情况,小编个人觉得也是比较常用的一种情况!

3、第三种:

 不使用系统提供的现有方法,自定义方法,修改 TabBar 的 subview 的 frame 就行了

 原理:

  UITabBarController的subview 共有两个,一个叫 UITabBar,就是底下的那个 Bar;另一个叫UITranstionview,就是 Bar 上面的视图。这两个 view 下面还有其他的subview,这就不用去管它了。把UITabBar的 y 向下移49个单位,把UITranstionview 的 hight 加长 49 个单位。

 代码1:

- (void)hidesTabBar:(BOOL)hidden{[UIView beginAnimations:nil context:NULL];[UIView setAnimationDuration:0];for (UIView *view in self.tabBarController.view.subviews) {if ([view isKindOfClass:[UITabBar class]]) {if (hidden) {[view setFrame:CGRectMake(view.frame.origin.x, [UIScreen mainScreen].bounds.size.height, view.frame.size.width , view.frame.size.height)];}else{[view setFrame:CGRectMake(view.frame.origin.x, [UIScreen mainScreen].bounds.size.height - 49, view.frame.size.width, view.frame.size.height)];}}else{if([view isKindOfClass:NSClassFromString(@"UITransitionView")]){if (hidden) {[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, [UIScreen mainScreen].bounds.size.height)];}else{[view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, [UIScreen mainScreen].bounds.size.height - 49 )];}}}}[UIView commitAnimations];}

 代码2:

-(void)makeTabBarHidden:(BOOL)hide { // Custom code to hide TabBarif ( [self.tabBarController.view.subviews count] < 2 ){return;}UIView *contentView; if ( [[self.tabBarController.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]] ){contentView = [self.tabBarController.view.subviews objectAtIndex:1];} else {contentView = [self.tabBarController.view.subviews objectAtIndex:0];}if (hide) {contentView.frame = self.tabBarController.view.bounds;} else {contentView.frame = CGRectMake(self.tabBarController.view.bounds.origin.x, self.tabBarController.view.bounds.origin.y,self.tabBarController.view.bounds.size.width, self.tabBarController.view.bounds.size.height -self.tabBarController.tabBar.frame.size.height);}self.tabBarController.tabBar.hidden = hide;
}

以上是小编总结的三种方法,也是从各位大神的博客总结的,如果有什么新的方法,欢迎一起讨论!

转载于:https://www.cnblogs.com/gfxxbk/p/5595335.html

【原】iOS学习之UITabBar的隐藏相关推荐

  1. ios学习之UITabBar(标签栏)

    自定义TabBar的高度:(无论横屏还是竖屏都以竖屏为准,之前就改为横屏的设置出错,找了好久才找到这个问题) tabBar = [[UITabBarController alloc] init];// ...

  2. 【原】iOS学习之事件处理的原理

    在iOS学习23之事件处理中,小编详细的介绍了事件处理,在这里小编叙述一下它的相关原理 1.UITouch对象 在触摸事件的处理方法中都会有一个存放着UITouch对象的集合,这个参数有什么用呢? ( ...

  3. iOS菜鸟学习——UITextView return键隐藏键盘

    iOS开发中,发现UITextView没有想UITextField中textFieldShouldReturn:这样的方法,那么要实现UITextView return键隐藏键盘,可以通过判断输入的字 ...

  4. ios学习 准备列表

    2019独角兽企业重金招聘Python工程师标准>>> Skip to content This repository Pull requests Issues Gist Watch ...

  5. iOS学习笔记-自己动手写RESideMenu

    代码地址如下: http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars ...

  6. iOS学习笔记-自定义过渡动画

    代码地址如下: http://www.demodashi.com/demo/11678.html 这篇笔记翻译自raywenderlick网站的过渡动画的一篇文章,原文用的swift,由于考虑到swi ...

  7. flappybird android源码,iOS学习之flappyBird游戏的实现

    导言 在本人还是学生的时候,flappyBird这款游戏非常火爆,最后等到Android版的出来之后,也是很痴迷的玩了一把.可是,本人游戏天赋一直平平,几度玩得想摔手机.本文主要介绍如何开发iOS平台 ...

  8. ios学习--iphone开发笔记和技巧总结(原址持续更新)

    ios学习--iphone开发笔记和技巧总结(原址持续更新) 分类: ios Object-C2012-04-18 10:16 2716人阅读 评论(1) 收藏 举报 uiviewiphonelist ...

  9. iOS学习:调用相机,选择图片上传,带预览功能

    iOS学习:调用相机,选择图片上传,带预览功能 发表于2年前(2013-05-30 21:38)   阅读( 18194) | 评论( 16) 27人收藏此文章,我要收藏 赞3 8月22日珠海 OSC ...

最新文章

  1. 怎么样才能快速的把淘宝店铺推广出去
  2. 背包思想计算方案的总数(货币系统)
  3. ReplaceQueryString
  4. pyqt5实战之自定义弹窗口
  5. Python程序执行原理
  6. 医疗项目中对网编的一些理解看法
  7. leetcode 493. 翻转对(分治算法)
  8. 实现阿里云容器镜像服务反向访问代理
  9. c语言不借助其他变量交换a b的值,C++面试题之数a、b的值互换(不使用中间变量)...
  10. “嫌贫爱富”之人,从一顿饭局当中便可看出
  11. shell脚本基础 (一)
  12. SparkSql 数据类型转换
  13. Java为什么要有堆外内存_作为 Java 开发者,你需要了解的堆外内存知识
  14. Hadoop设置任务执行队列及优先级
  15. provide sth for sb; provide sb with sth
  16. 【项目管理】 --- 范围说明书的内容和作用
  17. linux虚拟串口控制器驱动开发及代码实现(uart driver)
  18. C语言实训心得体会(精选4篇)
  19. 《五月集训》第二日——字符串
  20. 草根程序员转型做项目管理走过的点点滴滴之_华为裁员感想

热门文章

  1. 驱动操作硬件的根本操作
  2. php访问参数错误,phpcms参数错误怎么办
  3. httpservlet.java:131_Servlet学习1:Http状态码、多个Servlet之间调用规则、多个Servlet之间数据共享实现方案...
  4. 算法设计与分析 Fibonacci数列问题的词典法(动态规划:词典)
  5. SQL Server 2017 AlwaysOn on Linux 配置和维护(18)
  6. 【最佳实践】如何通过OSS的Bucket Policy设置访问授权?
  7. Spring和Spring MVC包扫描
  8. 对spring 中IOC 的理解
  9. 云栖大会的最后,阿里巴巴数据安全放了个大招!
  10. ViewPager,TabLayout,Fragment实现tabs滑动