美文网首页swift学习
swift如何高效的隐藏导航栏

swift如何高效的隐藏导航栏

作者: 星辰_羽 | 来源:发表于2020-05-12 15:21 被阅读0次

我们在项目中根据需求经常会为一些控制器自定义一个导航栏,这时我们就需要在此类控制器显示时隐藏导航控制器默认的导航栏,不显示时显示导航控制器自己的导航栏,这样就会导致代码侵入到各个需要自定义导航栏的控制器中。那么怎么做可以节省这种频繁的操作呢?我这有两个方法。
首先都添加UINavigationControllerDelegate代理对象为self

class BaseNavC: UINavigationController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }
}

第一种是在自定义的基类导航控制器中设置需要隐藏默认导航栏的控制器名单。

let needHiddenVCNames :[String] = ["xxx","xxx"]
extension BaseNavC: UINavigationControllerDelegate {
//导航控制器将要显示控制器时调用,名单中控制器隐藏导航栏,其他的控制器显示导航栏
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        print(type(of: viewController))
        let name: AnyClass! = object_getClass(viewController)
        let vcName = NSStringFromClass(name)
        let vc = vcName.split(separator: ".").last
        if needHiddenVCNames.contains(String(vc ?? "")){
            self.setNavigationBarHidden(true, animated: true)
        }else {
            self.setNavigationBarHidden(false, animated: true)
        }
    }
}

第二种是建立一个隐藏导航栏的协议,在需要隐藏的控制器中遵循协议,即可达到相同效果

/// 遵循这个协议,可以隐藏导航栏
protocol HideNavigationBarProtocol where Self: UIViewController {}

extension BaseNavC: UINavigationControllerDelegate {
    //导航控制器将要显示控制器时调用
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
            if (viewController is HideNavigationBarProtocol){
                self.setNavigationBarHidden(true, animated: true)
            }else {
                self.setNavigationBarHidden(false, animated: true)
            }
        }
}

好啦,这样我们就可以减少很多此类操作的代码冗余和管理。这里推荐第二种使用协议的方式隐藏导航栏,这样方便追踪到隐藏导航栏的代码控制,清晰代码阅读和理解。名单的方式不方便后面代码接手的人找到导航隐藏和显示的过程,还需要去维护名单的建设。

相关文章

  • swift如何高效的隐藏导航栏

    我们在项目中根据需求经常会为一些控制器自定义一个导航栏,这时我们就需要在此类控制器显示时隐藏导航控制器默认的导航栏...

  • swift-导航栏

    swift-导航栏直接上代码 导航栏整体背景颜色 导航栏左侧按钮 自定义 导航栏左侧 隐藏 导航栏右侧图片 参考:...

  • 隐藏导航栏

    隐藏导航栏 显示导航栏

  • Swift自定义导航栏的问题

    最近在看刀哥讲用Swift写微博,其中要实现隐藏系统的导航栏然后自定义导航栏,然后就发现了如下图的问题(Swift...

  • Android隐藏状态栏、导航栏

    Android隐藏状态栏、导航栏 Android 动态隐藏显示导航栏,状态栏 一、导航栏: 相关: 二、状态栏: ...

  • iOS 状态栏(statusbar)导航栏(navigation

    导航栏透明 导航栏渐变 状态栏字体颜色改变 导航栏隐藏如果导航栏自定义度高,需要完全自己重写,可以隐藏原来的导航栏...

  • iOS 隐藏导航栏和有导航栏页面跳转

    大部分首页或者搜索页面都会隐藏导航栏 隐藏导航栏页面 --> 有导航栏页面 但是,不知道大家有没有发现 隐藏导航栏...

  • 隐藏导航栏

    使用导航栏代理 隐藏导航栏

  • iOS导航栏的正确隐藏方式

    iOS导航栏的正确隐藏方式 iOS导航栏的正确隐藏方式

  • iOS导航栏隐藏透明处理

    1: 导航栏隐藏之间跳转 & 导航栏隐藏后显示自定义导航栏(由于系统导航栏透明造成的动画问题 暂时还未找到...

网友评论

    本文标题:swift如何高效的隐藏导航栏

    本文链接:https://www.haomeiwen.com/subject/uhubnhtx.html