iOS 13 Как скрыть панель поиска UISearchController в панели навигации - PullRequest
3 голосов
/ 24 сентября 2019

У меня есть панель навигации с панелью поиска (UISearchController). У меня есть значок кнопки на левой панели, который при нажатии отображает этот контроллер поиска, назначая его навигационному элементу следующим образом:

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

Это работает, но затем при отменеприкосновение к кнопке Я пытаюсь скрыть панель поиска, затем у меня отключен контроллер вида, и появляется черный экран (нет контроллеров представления)

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

Я попытался добавить задержку, поскольку не удалял этот контроллер поиска из системы навигации. Элемент анимирует его для расширенной навигации.панель с заголовком + контроллером поиска, а затем касание значка поиска правильно скрывает контроллер поиска.Так что проблема, я думаю, удаление контроллера поиска, пока он анимируется на расширенную панель навигации

1 Ответ

0 голосов
/ 26 сентября 2019

Супер хамский хакс, который временно решит вашу проблему:

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