繁体   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