这是我第一篇简书的技术文章,之前一直是在学习阶段,入行不长,一年多点,还是个小白。如果文档中有描述不对的地方,请不吝赐教。写技术文章的初衷就是督促自己在学习技术的时候,能多问点为什么,多往深里研究一点,毕竟简书里有很多大牛,理解错了,能够被指正,也是提升自己很好的途径。废话不多说,第一篇简书来简单介绍一下ViewController的这个hidesBottomBarWhenPushed属性。
起源
- 以此我们有了以下一些结论
1.可以放肆的使用了,不用担心有版本兼容问题
2.这个属性是声明在UINavigationController这个类中的。但是我们发现凡是继承自UIViewController的类就能够使用这个属性。我们知道UINavigationController是UIViewController的子类,那不同子类的属性怎么会可以使用呢?点到这个属性的声明中,看到了如下的代码
@interface UIViewController (UINavigationControllerItem)
@property(nonatomic,readonly,strong) UINavigationItem *navigationItem; // Created on-demand so that a view controller may customize its navigation appearance.
@property(nonatomic) BOOL hidesBottomBarWhenPushed __TVOS_PROHIBITED; // 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.
至此 真相大白了,原来是UIViewController的一个扩展中添加了这样一个属性,其实跟在父类中声明一个样子。
-
我们注意在Description中提到这个属性是标示UIToolBar这个继承自UIView的对象是否展示,但是平时用的时候不都是来隐藏UITabBar的么,What the hell? 继续往下看,我们来到UIToolBar的定义
明白了么?其实跟UITabBar功能是一致的,也就是说UITabBar就是UIToolBar来实现的
看到setItems方法了么,UIToolBar有个一摸一样的方法。至此基本搞明白来龙去脉了。
平时使用中需要注意的问题
- 这个属性使用的场景是这样的,一个UITabBar容器中放多个UINavigationController,其中某一个UINavigationController中controller进行push的时候。
- 如果A push 到 B,然后B push 到 C。如果只想让B隐藏Tabbar,从B回来或者从B push出去的controller都重新展现底部的TabBar,哪么只需要在B controller声明的时候 对B Controller的对象设置一下hidesBottomBarWhenPushed = YES即可。如下
vc4 * vc = [[vc4 alloc]init];
vc.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:vc animated:YES];
vc.hidesBottomBarWhenPushed = NO;
- 还是上面的场景,如果想让B push出去的Controller都不展示tabbar。如下这么写即可
vc4 * vc = [[vc4 alloc]init];
vc.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:vc animated:YES];
结论
- 第一份博客写的东西可能简单一点,只是mark一个态度,什么事情都要认认真真,知道这么用,还要知道为什么这么用。