如何在导航栏顶部添加视图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在导航栏顶部添加视图相关的知识,希望对你有一定的参考价值。

如何在导航栏上方添加视图?我有一个自定义导航控制器,我想在导航栏上方显示一个视图(就像在屏幕上一样),所以它应该在其他ViewControllers上可见

如果解决方案将在故事板上,那将会很棒。

试图添加UIWindow没有帮助。

答案

Swift 4.2,Xcode 10+

好的,从我所知道的(通过你的评论回复,虽然它仍然不是100%清晰),你的问题的最佳解决方案是使导航栏透明,这样你就可以看到任何navigationController呈现的视图控制器在它下面。为此,我建议对UIViewController进行以下扩展:

extension UIViewController {    
    func setupTransparentNavigationBarWithBlackText() {
        setupTransparentNavigationBar()
        //Status bar text and back(item) tint to black
        self.navigationController?.navigationBar.barStyle = .default
        self.navigationController?.navigationBar.tintColor = .black
    }

    func setupTransparentNavigationBarWithWhiteText() {
        setupTransparentNavigationBar()
        //Status bar text and back(item) tint to white
        self.navigationController?.navigationBar.barStyle = .blackTranslucent
        self.navigationController?.navigationBar.tintColor = .white
    }

    func setupTransparentNavigationBar() {
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.backgroundColor = .clear
        self.navigationController?.navigationBar.isTranslucent = true
    }
}

使用viewWillAppear子类的UIViewController中的前两个方法中的任何一个都可以让导航栏完全透明,statusBar文本+ wifi /电池指示器根据需要为黑色或白色。然后,您可以通过将约束固定到view.bounds.topAnchor来显示导航栏下的任何内容。例如。对于带有白色statusBar文本的透明导航控制器:

class YourViewController: UIViewController {
    override func viewWillAppear(_ animated: Bool) {
        setupTransparentNavigationBarWithWhiteText()
    }
}

以上是关于如何在导航栏顶部添加视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 的导航栏顶部显示自定义视图?

添加滚动视图时,所有视图都显示在导航栏后面的self.view顶部

如何添加视图,使其位于导航工具栏和标签栏之间

如何以编程方式在导航栏正下方添加视图?

定位导航栏顶部的安全区域

bar button item segue 不在下一个视图顶部添加导航栏