Панель навигации блокируется после нажатия кнопки Отмена в 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]
Другие вопросы по тегам