hidesBottomBarWhenPushed的正确用法_weixin_34054866的博客-程序员宅基地

技术标签: 移动开发  xcode  

 

//BaseNavigationController.h

#import <UIKit/UIKit.h>

@interface BaseNavigationController : UINavigationController

@end


//BaseNavigationController.m

#import "BaseNavigationController.h"

@interface BaseNavigationController ()

@end

@implementation BaseNavigationController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (self.childViewControllers.count > 0) {
        //当这个控制器push的时候,底部的Bar,比如Tabbar会滑走,也就是不会在push后的视图上显示出来,默认值为NO。
        viewController.hidesBottomBarWhenPushed = YES;
    }
    [super pushViewController:viewController animated:animated];
}

@end

 

 

http://www.isaced.com/post-223.html

今天说的是在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下去的时候,一般情况是这样:

 

push

 

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

 

push next

 

怎么样,是不是有时候确实会遇到这样的情况?其实苹果真的考虑的很周全,为我们创造了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://my.oschina.net/huqiji/blog/1137786

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34054866/article/details/91794434

智能推荐

Spring Batch在大型企业中的最佳实践_weixin_34294649的博客-程序员宅基地

在大型企业中,由于业务复杂、数据量大、数据格式不同、数据交互格式繁杂,并非所有的操作都能通过交互界面进行处理。而有一些操作需要定期读取大批量的数据,然后进行一系列的后续处理。这样的过程就是“批处理”。批处理应用通常有以下特点:数据量大,从数万到数百万甚至上亿不等;整个过程全部自动化,并预留一定接口进行自定义配置;这样的应用通常是周期性运行,比...

servlet配置_月岛花的博客-程序员宅基地

servlet 是jsp的原理,其实servlet就是一个java类.HttpServletRequest是内置对象request的类HttpServletResponse是内置对象response的类PrintWrite 是内置对象out的类1、servlet的web.xml配置向web容器添加一个servlet给这个servlet取一个名字对应的那个serv

恒大kk服务器信息端口,恒大kk手机客户端服务器_weixin_39870413的博客-程序员宅基地

恒大kk手机客户端服务器 内容精选换一换用户启用应用备份前,需先在本地服务器或虚拟机上更改安全组和安装客户端。本章节指导用户下载并安装客户端。目前仅支持64位操作系统的主机,暂不支持32位操作系统的主机。登录管理控制台。单击管理控制台左上角的,选择区域和项目。选择“存储 &gt; 云备份 &gt; 应用备份 &gt; 客户端”。参数说明:http://xxx.myhuaweicloud.com/华...

自旋锁解析及自写自旋锁_heaven殇灬的博客-程序员宅基地

自旋锁解析及自写自旋锁1.什么叫自旋锁?是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样做的好处是减少了线程的上下文切换的消耗,但是缺点是循环会消耗CPU2.手写自旋锁package com.example.demo;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReference;/** * Created by Administrator on 2020

常用可视化库_adamlay的博客-程序员宅基地_可视化库

常用可视化库1. Matplotlib1.1 matplotlib库1.1.1 绘图1.1.2 图像、文字设置1.1.3 图像IO1.1.4 Axes轴面设置1.1.5 Figure对象设置1.2 plt.plot()属性设置图像风格和样式1.3 plt.rcParams1.4 常用实参字符标记字符线型字符颜色字符1.5 pie()属性2. Pyecharts2.1 Pyecharts库2.1.1 导入2.1.2 常用图表2.1.3 其他图表2.1.4 图像设置及渲染2.1.5 Pyecharts.Opti

Python字符与字节新编_luck738的博客-程序员宅基地

字符字符是一个信息单位,简单来讲就是一个字母、数字、标点符号、汉字等。字符的最佳定义是Unicode字符:(文章转载自乐字节)它是一个全球化的标准,能表示世界上所有语言的字符。Unicode字符的标识(码位)是以4~6个十六进制数字表示的,并且加前缀U+。字节字节是计算机信息计量单位,一个字节代表八个比特,存储的数值范围为0~255。字节跳动(ByteDance)互联网公司的字节就是这个字节。字节是机器的,字符是人类的。把人类字符转换为机器字节时使用的算法叫做编码,反之叫做解码。算法不同

随便推点

UIViewController的生命周期及iOS程序执行顺序_huifeidexin_1的博客-程序员宅基地

当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序1、 alloc                                   创建对象,分配空间2、init (initWithNibName) 初始化对象,初始化数据3、loadView                          从nib载入视图 ,通常这一步不需要去干涉。除非你没有使用xib文件创建视图

7.SpringBoot整合Kafka_扛麻袋的少年的博客-程序员宅基地

1.引入Maven依赖&lt;!-- springboot整合kafka --&gt;&lt;dependency&gt; &lt;groupId&gt;org.springframework.kafka&lt;/groupId&gt; &lt;artifactId&gt;spring-kafka&lt;/artifactId&gt; &lt;version&gt;...

Ane制作_weixin_34228387的博客-程序员宅基地

ANE 的制作方式第一步:打开vs2010,新建工程 win32工程 NativeAdd,将dllmain.cpp 修改成如下图所示:// dllmain.cpp : 定§义°? DLL 应|用?程¨序¨°的?入¨?口¨点?。ê#include &lt;Windows.h&gt;B...

python入门指标_Python基础 | pandas基础统计_weixin_39567169的博客-程序员宅基地

本文示例数据下载,密码:vwy3import pandas as pdimport numpy as np# 数据是之前在cnblog上抓取的部分文章信息df = pd.read_csv('./data/SQL测试用数据_20200325.csv',encoding='utf-8')df.head(3)单列统计单列单统计指标# 计数(不去重),不会将NaN值计算在内df['read_cnt'].c...

cf 1154G Minimum Possible LCM_二分抄代码的博客-程序员宅基地

...这题关键在他的a[i]&lt;=1e7那么我们知道lcm(a,b)=a*b/gcd(a,b);那么我们只要枚举每一个因数d,不管他是不是gcd然后找出能被这个d整除的最小的两个数字a,b那么对于这个因数d,tmp=a*b/d,ans=min(ans,tmp)由于我们枚举了1-1e7所有的质因子,所以就算a*b/d不是lcm,但之后总会枚举到a*b/gcd(a,b)而使...

java excel 加密_Java 加密/解密Excel_丸子里里的博客-程序员宅基地

概述设置excel文件保护时,通常可选择对整个工作簿进行加密保护,打开文件时需要输入密码;或者对指定工作表进行加密,即设置表格内容只读,无法对工作表进行编辑。另外,也可以对工作表特定区域设置保护,即设置指定区域可编辑或者隐藏数据公式,保护数据信息来源。无需设置文档保护时,可撤销密码保护,即解密文档。下面,将通过java程序演示以上加密、解密方法的实现。示例大纲1. Excel工作簿1.1 加密工作...

推荐文章

热门文章

相关标签