Swift3.0之hidesBottomBarWhenPushed的使用和注意事项

来源:互联网 发布:linux ftp的宿主 编辑:程序博客网 时间:2024/06/05 16:50
我们有时候在开发iOS的时候,涉及到跳转界面时,需要隐藏tabbar,以便我们重新定义新的。

OC版本的:

//1.设置self.tabBarController.tabBar.hidden=YES;
     
self.tabBarController.tabBar.hidden=YES;
 
//2.如果在push跳转时需要隐藏tabBar,设置self.hidesBottomBarWhenPushed=YES;
 
    self.hidesBottomBarWhenPushed=YES;
    NextViewController *next=[[NextViewController alloc]init];
    [self.navigationController pushViewController:next animated:YES];
    self.hidesBottomBarWhenPushed=NO;

//注意:在push后设置self.hidesBottomBarWhenPushed=NO;

其实在OC中直接对 next.hidesBottomBarWhenPushed=YES就可以在跳转界面的时候隐藏tabbar

而不需要设置self.hidesBottomBarWhenPushed=NO;


Swift版本的:

let  testVC = UIViewController()self.hidesBottomBarWhenPushed = trueself.navigationController?.pushViewController(testVC, animated: true)self.hidesBottomBarWhenPushed = false
如果是push到下个界面就没有问题,如果从第二个界面push到第三个界面,再返回第二个界面,tabbar就会显示,这样还是达不到我们想要的结果

下面是我自己对hidesBottomBarWhenPushed 属性设置的一个总结,应该每一次push,都去执行对hidesBottomBarWhenPushed属性进行设置,如

果要push的界面多了,那不是做很多繁琐的工作,所以自定义了UINavigationController,对hidesBottomBarWhenPushed属性进行统一设置

import UIKitclass BaseNavigationController: UINavigationController {    override func viewDidLoad() {        super.viewDidLoad()        // Do any additional setup after loading the view.    }    override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()        // Dispose of any resources that can be recreated.    }        //每一次push都会执行这个方法,push之前设置viewController的hidesBottomBarWhenPushed    override func pushViewController(_ viewController: UIViewController, animated: Bool) {        viewController.hidesBottomBarWhenPushed = true        super.pushViewController(viewController, animated: true)        viewController.hidesBottomBarWhenPushed = false           }        override func popViewController(animated: Bool) -> UIViewController? {                //以下函数是对返回上一级界面之前的设置操作        //每一次对viewController进行push的时候,会把viewController放入一个栈中        //每一次对viewController进行pop的时候,会把viewController从栈中移除        if self.childViewControllers.count == 2        {            //如果viewController栈中存在的ViewController的个数为两个,再返回上一级界面就是根界面了            //那么要对tabbar进行显示            let controller:UIViewController = self.childViewControllers[0]            controller.hidesBottomBarWhenPushed = false                    }        else        {            //如果viewController栈中存在的ViewController的个数超过两个,对要返回到的上一级的界面设置hidesBottomBarWhenPushed = true            //把tabbar进行隐藏            let count = self.childViewControllers.count-2            let controller = self.childViewControllers[count]            controller.hidesBottomBarWhenPushed = true        }                        return super.popViewController(animated: true)    }}