簡體   English   中英

iOS 13 如何在導航欄中隱藏UISearchController searchBar

[英]iOS 13 How to hide UISearchController searchBar in navigationBar

我有帶搜索欄的導航欄(UISearchController) 我有左欄按鈕圖標,單擊該圖標時,通過將其分配給 navigationItem 來顯示此搜索 controller,如下所示:

if navigationItem.searchController != nil {
            navigationItem.searchController = nil
            navigationController?.view.setNeedsLayout()
            navigationController?.view.layoutIfNeeded()
        } else {
            navigationItem.searchController = searchController
            navigationController?.view.setNeedsLayout()
            navigationController?.view.layoutIfNeeded()

            searchController.searchBar.becomeFirstResponder()
        }

它可以工作,但是如果在取消按鈕觸摸時我嘗試隱藏搜索欄,那么我的視圖 controller 被關閉並出現黑屏(沒有視圖控制器)

extension SearchableMenuViewController : UISearchBarDelegate {

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        guard #available(iOS 11.0, *) else { return }
        guard !isAlwaysVisible else { return }

        if #available(iOS 13.0, *) {
            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
                self.navigationItem.searchController = nil
                self.navigationController?.view.setNeedsLayout()
                self.navigationController?.view.layoutIfNeeded()
            }
        } else {
            navigationItem.searchController = nil
            navigationController?.view.setNeedsLayout()
            navigationController?.view.layoutIfNeeded()
        }
    }

我試圖添加延遲,因為沒有從 navigationItem 中刪除此 searchcontroller 將其設置為帶有標題 + 搜索 Controller 的擴展導航欄,然后點擊搜索圖標正確隱藏搜索 controller。 所以問題是我認為在擴展導航欄動畫時刪除搜索 controller

超級蹩腳的 haxx 可以暫時解決您的問題:

func didDismissSearchController(_ searchController: UISearchController) {

        if #available(iOS 13, *) {
            navigationItem.searchController = nil

            self.navigationController?.view.setNeedsLayout()
            self.navigationController?.view.layoutSubviews()

            let view = UIView()
            self.navigationController?.navigationBar.insertSubview(view, at: 1)
            view.removeFromSuperview()
        }      
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM