У меня есть панель навигации с панелью поиска (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()
}
}
Я попытался добавить задержку, поскольку не удалял этот контроллер поиска из системы навигации. Элемент анимирует его для расширенной навигации.панель с заголовком + контроллером поиска, а затем касание значка поиска правильно скрывает контроллер поиска.Так что проблема, я думаю, удаление контроллера поиска, пока он анимируется на расширенную панель навигации