首先,如果这是重复的内容,则表示歉意 Hide navigation bar after using search bar
上面的问题是针对Objective-C的,没有可行的解决方案,并且已经停用了几年,所以我认为这个问题值得一个新的问题。
我面临的问题是,仅当演示时搜索控制器未处于活动状态时,详细视图控制器中的导航栏才隐藏。如果我从过滤后的表格中显示Detail VC,则在视图顶部会出现一个半透明的导航栏。
class PlaylistViewController: UIViewController {
var playlists: [Playlist] = [standardPlaylist]
var filteredPlaylists: [Playlist] = []
let searchController = UISearchController(searchResultsController: nil)
var isSearchBarEmpty: Bool {
searchController.searchBar.text?.isEmpty ?? true
}
var isFiltering: Bool {
return searchController.isActive && !isSearchBarEmpty
}
@IBOutlet weak var PlaylistTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.setNavigationBarHidden(false, animated: true)
self.navigationController?.navigationBar.prefersLargeTitles = true
PlaylistTableView.delegate = self
PlaylistTableView.dataSource = self
//search bar setup
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search Playlists"
searchController.searchBar.sizeToFit()
navigationItem.searchController = searchController
definesPresentationContext = true
//When table view row is selected
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
//instantiate a DetailVC
//other logic
DispatchQueue.main.async {
self.navigationController?.setViewControllers([detailVC], animated: true)
//I have tried hiding the Nav Bar here but the problem persists
}
}
}
extension PlaylistViewController: UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
let searchBar = searchController.searchBar
filterPlaylists(searchBar.text!)
}
}
class DetailVC: UIViewController {
override func viewWillAppear(_ animated: Bool) {
navigationController?.setNavigationBarHidden(true, animated: false)
}