Панель навигации блокируется после нажатия кнопки Отмена в UISearchController
Я готовлю приложение для iOS 13 и получаю ошибку с контроллером поиска на панели навигации. Как решить проблему с панелью навигации?
let search = UISearchController(searchResultsController: nil)
search.dimsBackgroundDuringPresentation = false
search.searchResultsUpdater = self
search.hidesNavigationBarDuringPresentation = false
self.definesPresentationContext = true
search.searchBar.isTranslucent = false
self.navigationItem.searchController = search
self.navigationItem.hidesSearchBarWhenScrolling = true
Нажмите Отмена, и элементы панели навигации станут недоступны. Нажатие на контроллер представления приводит к перекрытию элементов панели навигации.
Я создал тестовый проект на git https://github.com/eKroman/TESTsearchBar
Ошибка появляется в бета-версии iOS 13 (протестировано на iPad) с использованием Xcode 11 от бета-версии 7 (возможно, более старой бета-версии) до Xcode 11 GM seed 2. Не отображается на симуляторах.
3 ответа
Я столкнулся с той же проблемой, если я отменю searchBar и изменю navigationItem.title, то у меня будет двойной заголовок. Это похоже на то, что слой-призрак панели навигации остается здесь в контроллере навигации.
Вот как я это исправил:
searchController.hidesNavigationBarDuringPresentation = true
Вероятно, лучше всего использовать его, пока Apple не исправит эту проблему.
Я также заметил, что кнопка "Назад" переключается на цвет по умолчанию (синий), как если бы навигационная панель TintColor была сброшена.
Конфигурация: - Xcode 11.0 (11A420a) - iOS 13.1 (17A5844a)
Для возврата кнопки возврата к цвету по умолчанию (синий) в ответе @CoachThys мне удается обойти это с помощью кода ниже.
if #available(iOS 13.0, *) {
let appearance = UINavigationBarAppearance()
/* .. set other things on appearances */
appearance.buttonAppearance.normal.titleTextAttributes = [.foregroundColor: color]
standardAppearance = appearance
compactAppearance = appearance
scrollEdgeAppearance = appearance
}
Однако я не могу найти способ обойти изображение заднего индикатора, которое на короткое время все еще сбрасывается до синего цвета.
Добавление настраиваемой кнопки возврата с изображением исправит новую ошибку. У меня это хорошо работает.
let negativeSpacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
negativeSpacer.width = -8
self.navigationItem.leftBarButtonItems = [negativeSpacer, leftBarButtonItem]