【问题标题】:Show/hide navigation bar when searchcontroller is set设置 searchcontroller 时显示/隐藏导航栏
【发布时间】:2021-06-04 20:57:09
【问题描述】:

我有一个应用程序,我只需要在列表屏幕上而不是在详细屏幕上的导航栏(在大多数情况下)。我可以通过使用

将导航栏隐藏在详细信息屏幕中轻松实现此目的
self.navigationController?.setNavigationBarHidden(true, animated: false) //Added in viewWillAppear

可选地,列表屏幕还允许用户在点击按钮时进行搜索。

当用户点击搜索按钮时,我向导航栏添加了一个 searchController

self.navigationItem.searchController = mySearchController

此时如果我将用户带到详细视图,导航栏不会隐藏在详细视图上。我尝试添加代码以隐藏 viewDidAppear: 中的导航栏,它可以工作,但显示从导航栏到无导航栏的奇怪过渡。

如果在前一屏幕中设置了 searchcontroller,如何让导航栏隐藏在详细视图中?谢谢

【问题讨论】:

    标签: ios swift uinavigationcontroller


    【解决方案1】:

    根据我从您的问题中了解到的情况,您想在详细视图中隐藏导航栏并在您处于主视图时再次显示(假设),如果是这种情况,我会在详细信息中执行类似的操作查看

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.setNavigationBarHidden(true, animated: true)
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        self.navigationController?.setNavigationBarHidden(false, animated: true)
    }
    

    编辑
    请注意,使用此实现,您将失去回扫功能

    【讨论】:

    • 我能做到。问题是当我在导航栏中有一个搜索栏时。在这种情况下,调用 setNavigationBarHidden 不会隐藏导航栏,除非在 viewDidAppear 中调用(请参阅问题了解更多详情)
    猜你喜欢
    • 2016-06-14
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    相关资源
    最近更新 更多