资讯专栏INFORMATION COLUMN

iOS:hidesBottomBarWhenPushed的正确用法

RdouTyping / 365人阅读

摘要:今天说的是在嵌套时,进行的时候隐藏的问题。但是一旦你升级到了,在上编译,你的就会开始出现状况了。代码非常简单,一句或者两句话即可,这里得分几种的情况。

今天说的是在TabBar嵌套Nav时,进行Push的时候隐藏TabBar的问题。

之前项目也需要这么做,那时候 iOS7 还没出,也是各种搜罗,后来的解决方法是当push操作的时候自己隐藏 Tabbar,push 过去视图拉伸适应屏幕,再 pop 回来的时候接再显示 Tabbar,过程复杂还需要自己写动画,最终效果也不是很理想。

前两天公司 APP上架,当时没有适配 iOS7,在 XCode4.6 上开发编译并发布,居然在iOS7下跑起来没有太大的问题,只是一个Nav的文字错位,有闪退,不过勉强还能用,其中有自定义Tabbar,有很多动画,后来在一篇介绍 iOS7 适配的文章中看到这么一句话:

在Xcode 4.6上使用iOS 6 SDK进行编译的app在iOS
7上运行时是采用一种特殊的模拟模式,它试图保存app原来的样子。但是一旦你升级到了Xcode 5,在iOS
7SDK上编译,你的app就会开始出现状况了。

已经写的很清楚了,于是我再到Xcode5中编译运行原来的项目,就破漏百出了,开始完全崩溃,各种问题浮现。

好了,回到今天说的正题,先和大家说说hidesBottomBarWhenPushed,从这个属性名也能知道它的意思了,官方的解释是这样:

If YES, then when this view controller is pushed into a controller hierarchy with a bottom bar (like a tab bar), the bottom bar will slide out. Default is NO.

大致意思是如果为YES,当这个控制器push的时候,底部的Bar,比如Tabbar会滑走,也就是不会在push后的视图上显示出来,默认值为NO。

我讲的场景大概为这个样子:

最外面是一个TabBarController,套了两个NavgationController,当其中一个VC push下去的时候,一般情况是这样:

当隐藏Tabbar的时候再push,效果是这样:

怎么样,是不是有时候确实会遇到这样的情况?其实苹果真的考虑的很周全,为我们创造了hidesBottomBarWhenPushed这个属性,为了解决这个问题。代码非常简单,一句或者两句话即可,这里得分几种Push的情况。

Case1:xib加载或者Storyboard用identifier获取Controller

UIViewController *v2 = [self.storyboard instantiateViewControllerWithIdentifier:@"v2"];
v2.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:v2 animated:YES];

Case2:拉线,也就是Storyboard用performSegue

self.hidesBottomBarWhenPushed = YES;
[self performSegueWithIdentifier:@"tov2" sender:nil];
self.hidesBottomBarWhenPushed = NO;

Tip:经测试证明,此种方式只会对后面的一级生效,继续往后Push还会出现TabBar,要继续往后push也隐藏Tabbar还得使用Case3的方法,也建议如此!

Case3:拉线,在prepareForSegue函数里

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [segue.destinationViewController setHidesBottomBarWhenPushed:YES];
}

更方便的做法:如果用 Storyboard,可以在 ViewController 的设置面板中把 Hide Bottom Bar on Push 属性勾选上,效果和上文代码一样。

暂时就用到这几点,我之前的做法,自己手动隐藏,拉伸view,显示不但麻烦,兼容性也不好,移到iOS7上问题多多,不过用这个属性可以非常方便的实现此需求,并且在iOS6上也完美兼容哦。

注意:还有个问题,这个属性只支持非自定义的Tabbar,也就是只支持原生Tabbar,如果是自定义的Tabbar会产生你意想不到的效果,我之前就遇到过,因为使用hidesBottomBarWhenPushed后,系统内部会处理TabbarController上Tabbar这个View,我之前自定义的Tabbar做法是吧原生Tabbar这个View隐藏掉,然后添加到自己绘制的Tabbar
View上去,缺点就是这样你的自定义的TabBarview接收不到系统应有的一些响应,于是我尝试着把自定义的TabBar
View添加到原来的TabBar View上,也就是不隐藏原生的TabBar,而是覆盖在上面,看不出任何区别,效果也能达到上面图片的效果!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15383.html

相关文章

  • autossh 正确用法

    摘要:以前用的时候,只是简单的用了一个参数。结果遇到一开始没联上网或者中途断网都还是起不到重连的作用。后来在这儿看了才知道原来要加一些参数的。的意思在里面是这样写的大概意思是这是一种比较好的用法。。 以前用 autossh 的时候,只是简单的用了一个 -N 参数。结果遇到一开始没联上网或者中途断网都还是起不到重连的作用。 后来在这儿http://www.oschina.net/transl...

    A Loity 评论0 收藏0
  • autossh 正确用法

    摘要:以前用的时候,只是简单的用了一个参数。结果遇到一开始没联上网或者中途断网都还是起不到重连的作用。后来在这儿看了才知道原来要加一些参数的。的意思在里面是这样写的大概意思是这是一种比较好的用法。。 以前用 autossh 的时候,只是简单的用了一个 -N 参数。结果遇到一开始没联上网或者中途断网都还是起不到重连的作用。 后来在这儿http://www.oschina.net/transl...

    changfeng1050 评论0 收藏0
  • CSS box-sizing属性正确用法

    摘要:自定义属性变量属性允许我们在元素的总宽度和高度中包含填充和边框。属性解决了这个问题。下面的代码确保以更直观的方式调整所有元素的大小。将其应用于所有元素是安全和明智的大小调整属性定义如何计算元素的宽度和高度是否应该包含填充和边框 CSS自定义属性(变量) CSS box-sizing属性允许我们在元素的总宽度和高度中包含填充和边框。 没有CSS box-sizing属性 默认情况下,元素...

    baihe 评论0 收藏0
  • CSS box-sizing属性正确用法

    摘要:自定义属性变量属性允许我们在元素的总宽度和高度中包含填充和边框。属性解决了这个问题。下面的代码确保以更直观的方式调整所有元素的大小。将其应用于所有元素是安全和明智的大小调整属性定义如何计算元素的宽度和高度是否应该包含填充和边框 CSS自定义属性(变量) CSS box-sizing属性允许我们在元素的总宽度和高度中包含填充和边框。 没有CSS box-sizing属性 默认情况下,元素...

    printempw 评论0 收藏0
  • CSS box-sizing属性正确用法

    摘要:自定义属性变量属性允许我们在元素的总宽度和高度中包含填充和边框。属性解决了这个问题。下面的代码确保以更直观的方式调整所有元素的大小。将其应用于所有元素是安全和明智的大小调整属性定义如何计算元素的宽度和高度是否应该包含填充和边框 CSS自定义属性(变量) CSS box-sizing属性允许我们在元素的总宽度和高度中包含填充和边框。 没有CSS box-sizing属性 默认情况下,元素...

    bawn 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<