IOS7.0 及以上
在TabBarController + UINavigationController 中, 若从进入下一级页面隐藏Tabbar,采用的方法就是用系统提供的方法,setHidesBottomBarWhenPushed。默认为NO。设为YES时,当PUSH到UINavigationController 中就隐藏Tabbar,直到它POP出来。这样就OK了。
但这存在一种问题,就是当切换window的rootViewController 时,就会失效,Tabbar显示出来了。
解决。
1.如何在切换后实现隐藏。
切换回TabBarController 时,判断当前选择的UINavigationController 分支的层级,如果UINavigationController的viewControllers.count 为0,说明在UINavigationController 顶层是需要显示Tabbar,若非0就隐藏。
这里注意一点,要先设置window的rootViewController 为TabBarController。再去做判断,否则无效果。
2.问题又来了,隐藏Tabbar后,原视图的view并没有变化,高度还是未包含tabbar的高度。
解决:
在UINavigationController 的继承类里或者每一个具体页面中加入
self.edgesForExtendedLayout=UIRectEdgeBottom;
self.automaticallyAdjustsScrollViewInsets=NO;
这两句话。