iOS 13如何在导航栏中隐藏UISearchController搜索栏
我有带搜索栏的导航栏(UISearchController) 我有一个左栏按钮图标,单击该图标时,通过将其分配给navigationItem显示此搜索控制器,如下所示:iOS 13如何在导航栏中隐藏UISearchController搜索栏,ios,swift,uisearchcontroller,ios13,Ios,Swift,Uisearchcontroller,Ios13,我有带搜索栏的导航栏(UISearchController) 我有一个左栏按钮图标,单击该图标时,通过将其分配给navigationItem显示此搜索控制器,如下所示: if navigationItem.searchController != nil { navigationItem.searchController = nil navigationController?.view.setNeedsLayout() nav
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()
}
它可以工作,但如果点击“取消”按钮,我试图隐藏搜索栏,则我已解除视图控制器,并出现黑屏(无视图控制器)
我已尝试添加延迟原因,但未从导航中删除此searchcontroller项目会使用标题+搜索控制器将其动画显示到扩展导航栏,然后点击搜索图标正确隐藏搜索控制器。所以问题是,我认为在将搜索控制器设置为扩展导航栏的动画时,删除搜索控制器将暂时解决您的问题:
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()
}
}
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()
}
}