所以我有一个搜索图标作为我的右栏按钮项。当用户点击图标时,它允许用户搜索并仅在tableview中显示某些值。它还隐藏了顶部的导航栏按钮和导航控制器正下方的filterBar
func setupNavBarButtons() {
let searchImage = UIImage(named: "search_icon")?.withRenderingMode(.alwaysOriginal)
let searchBarButtonItem = UIBarButtonItem(image: searchImage, style: .plain, target: self, action: #selector(handleSearch))
navigationItem.rightBarButtonItem = searchBarButtonItem
setupFilterButton()
}
在搜索时隐藏过滤条和导航栏项目:
func handleSearch() {
searchController.searchBar.isHidden = false
navigationItem.titleView = searchController.searchBar
searchController.searchBar.becomeFirstResponder()
navigationItem.rightBarButtonItems = nil
navigationItem.leftBarButtonItems = nil
filterBar.isHidden = true
tableView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
}
然后,一旦用户停止搜索,它就会再次出现,如下所示:
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
setupNavBarButtons()
searchController.searchBar.isHidden = true
filterBar.isHidden = false
tableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 40).isActive = true
// Also tried tableView.topAnchor.constraint(equalTo: filterBar.bottomAnchor).isActive = true
}
搜索前:
搜索期间
搜索后:正如您所见,桌面视图无法返回原来的位置。 filterBar
是带有'地图'的灰色视图。和'位置'
仍然遇到同样的问题,所以我在这里上传了我的项目:
答案 0 :(得分:1)
首先,您添加了40个px的“高度”布局约束。 并且当用户单击搜索按钮时,您添加了“高度”布局约束,其中0 px。 再次,当用户点击取消按钮时,你添加了40个px的'height'布局约束。
您需要重用布局约束。
{{1}}
}
有一个有趣的编码! :)