Swift - Скрыть панель навигации после поиска - PullRequest
0 голосов
/ 30 января 2020

Прежде всего, извините, если это дубликат Скрыть панель навигации после использования панели поиска

Вышеуказанный вопрос был для Objective- C, не имеет рабочего решения и был неактивен в течение нескольких лет, поэтому я подумал, что проблема требует нового вопроса.

Проблема, с которой я сталкиваюсь, заключается в том, что панель навигации в контроллере подробного представления скрыта, только если контроллер поиска не был активен в момент представления , Если я представлю Деталь V C из отфильтрованной таблицы, я получу полупрозрачную панель навигации вверху представления.


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)
    }
...