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

前端之家收集整理的这篇文章主要介绍了Swift3.0之hidesBottomBarWhenPushed的使用和注意事项前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有时候在开发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 = true
self.navigationController?.pushViewController(testVC,animated: true)
self.hidesBottomBarWhenPushed = false
如果是push到下个界面就没有问题,如果从第二个界面push到第三个界面,再返回第二个界面,tabbar就会显示,这样还是达不到我们想要的结果

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

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

import UIKit

class 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)
    }

}

猜你在找的Swift相关文章