IOS中如何在多层界面之间显示与隐藏标签栏(UITabBar)

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

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

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

但是一样不好使。

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

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

我把下面的代码写到了项目中所有视图控制器的父类中:(记得暴露出这两个方法,让子类调用)

#pragma mark - 隐藏TabbBar
- (void)hideTabbar {
  if (_originY + 49 == fabs(self.tabBarController.tabBar.frame.origin.y)) {
    return ;
  }
  for (UIView *v in [self.tabBarController.view subviews]) {
    if ([v isKindOfClass:[UITabBar class]]) {
      [UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){

        CGRect frame = v.frame;
        frame.origin.y += 49.0f;
          v.frame = frame;
        NSLog(@"tabBar originY: %f", frame.origin.y);
      } completion:nil];
    } else {
      [UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){

        CGRect frame = v.frame;
        frame.size.height += 49.0f;
        v.frame = frame;

      } completion:nil];
    }
  }
  return;
}

#pragma mark - 显示TabBar
- (void)showTabBar {
  if (_originY == fabs(self.tabBarController.tabBar.frame.origin.y)) {
    return ;
  }
  for (UIView *v in [self.tabBarController.view subviews]) {
    if ([v isKindOfClass:[UITabBar class]]) {
      [UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){

        CGRect frame = v.frame;
        frame.origin.y -= 49.0f;
          v.frame = frame;
      } completion:nil];
    } else {
      [UIView animateWithDuration:0.01 delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(){
        CGRect frame = v.frame;
        frame.size.height -= 49.0f;
        v.frame = frame;
      } completion:nil];
    }
  }
  return;
}
时间: 2024-09-04 12:29:24

IOS中如何在多层界面之间显示与隐藏标签栏(UITabBar)的相关文章

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

IOS中多层界面之间显示与隐藏tabBar? 在做项目的时候,遇到了一个难题,使用hidesBottomWhenPushed=YES属性设置,可以让本级界面及其以后界面都隐藏,但是根据项目 需求,在第4层是需要显示标签栏的. 于是想了很多的办法,每个要显示的push的界面前都加了hidesBottomWhenPushed=YES,要隐藏的push的界面都加了hidesBottomWhenPushed=NO, 但是一样不好使. 手动调用self.tabbarchontroller.tabbar.h

freemarker模板中实现div包含元素的显示与隐藏

问题描述 小弟刚接触freemarker谁能帮个忙解决下问题!以前在JSP页面上用<selectname="select1"onchange="changeClick()"><optionvalue="1">aaa</option><optionvalue="2">bbb</option></select><divid="div1"

ext中tabpanel选项卡的切换效果(显示与隐藏)

例1  代码如下 复制代码 var myTabs = new Ext.TabPanel({     id:'myTabs',     region:'center',       margins:'3 3 3 0',             activeTab: 0,             border: false,       defaults:{autoScroll:true},             items:[                 {layout: 'fit', in

android li...-安卓外部控制ListView内部的一个删除按钮的显示与隐藏该怎么做

问题描述 安卓外部控制ListView内部的一个删除按钮的显示与隐藏该怎么做 比如说在标题栏有一个编辑按钮,当点击编辑时listView所有Item内部的删除Button显示,编辑变成完成,点击完成时所有的删除按钮隐藏. 我做出来的效果只能是listview中的第一行删除button显示与隐藏,其它行并没有出现button,我觉得是不是得在getview中对list view做点啥?请高手帮帮忙-先谢谢了. 解决方案 之前遇到过类似的需求,做法仅供参考. listView的Adapter中添加一

JQuery显示、隐藏div的几种方法简明总结_jquery

例子 复制代码 代码如下: $("#top_notice").css("display", "block");//第1种方法  //$("#top_notice").attr("style", "display:block;");//第2种方法  //$("#top_notice").show();//第3种方法    1.给元素换class,来实现隐藏div,前提是

android layout-android中如何实现在一个界面中分多层显示不同内容?

问题描述 android中如何实现在一个界面中分多层显示不同内容? 想开发一个手机小应用程序,想在主界面上设三个选项卡类型的层分别显示三个不同风格的图片,这个应如何实现?类似于对话框中的各个选项卡的效果

iOS中read it later阅读界面隐性导航设计

文章描述:iOS中read it later软件的阅读界面. 移动设备阅读类软件最重要的特性之一就是尽可能的增大阅读面积,为此,就必须尽可能的让屏幕中的导航占到最小,甚至隐藏,手机浏览器也基本属于阅读类软件,最近流行的海豚浏览器甚至将电脑中的"鼠标手势"引入到手机浏览器中. 什么是隐性导航 下图是iOS中read it later软件的阅读界面,除了最上方的状态栏,阅读区域占满了整个屏幕,没有任何诸如"返回"."关闭"的导航按钮,实际这些按钮是隐

iOS中监控软键盘显示或隐藏的可靠方法

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 如果你试图在软键盘的显示或隐藏时去改变的UI界面结构,仅有的方法是你可以依赖使用键盘的通知消息. UITextField代理消息只会在文本区域开始被编辑时发出,而不管屏幕上是否有软件盘显示. 记住,用户可以使用蓝牙键盘连接iOS设备,并且使用它去编辑文本区域或任何其他你App中可输入控件的内容. 在使用蓝牙键盘的情况下,并没有软键盘会显示在屏幕上--如果你在文

【iOS开发】在界面上显示“HELLO”

大家学习iOS开发,都想有朝一日看到自己的第一个界面程序.本文介绍了在界面上显示"HELLO"的整个开发过程,可供iOS初学者参考. 第一步 打开Xcode开发工具 在MAC电脑的Launchpad中打开Xcode工具,如图1所示. 图1 打开Xcode工具示意图 要新建工程,选择图1中的"Create a new Xcode project". 第二步 创建iOS工程 选择图1中的"Create a new Xcode project"之后,即