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

Posted

技术标签:

【中文标题】如何在导航栏顶部添加视图【英文标题】:How to add view on top of navigation bar 【发布时间】:2019-04-24 11:01:05 【问题描述】:

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

如果解决方案出现在情节提要上,那就太好了。

尝试在 UIWindow 上添加没有帮助。

【问题讨论】:

为了清楚起见,您能否编辑您的问题:“我有一个自定义导航控制器,并且我想要查看所有内容(就像在屏幕上一样),所以它应该是在其他 ViewController 上可见”不是那么清楚。你是说你想在(?)状态栏或导航栏上展示东西,或两者兼而有之? 我想在导航栏上方显示一个视图,它是否会覆盖状态栏并不重要 在上面放一个uiview,使用渐变得到想要的解决方案 self.navigationController.navBar.addSubView(requiredViewToAdd) 在你的 initialViewController 中类似这样的东西 ios 11 custom navbar goes under status bar的可能重复 【参考方案1】:

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
    

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

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

【讨论】:

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

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

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

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

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

在导航栏iOS 11安全区域下定位视图

当列表位于导航栏下方时,如何摆脱出现在导航栏顶部的图层?