UINavigationBar становится белым и не закрывается при использовании navigationItem.searchController в iOS 13 - PullRequest
0 голосов
/ 09 ноября 2019

У меня возникают проблемы при использовании navigationItem.searchController в iOS 13. Панель поиска контроллера поиска изначально закрыта, но после прокрутки представления таблицы она не свернется обратно. Он «подпрыгивает» назад, когда я пытаюсь скрыть панель.

Кроме того, панель навигации становится белой после появления панели поиска. (Панель навигации имеет собственный оттенок цвета; см. Прикрепленные снимки экрана.) Обратите внимание, что это не так в iOS <13. </p>

Является ли это ошибкой в ​​iOS 13? Если да, то есть ли способ сохранить цвет оттенка панели навигации и скрыть панель поиска при прокрутке представления таблицы вверх?

Панель поиска, кажется, скрывается при заполнении представления таблицыс ячейками для заполнения экрана.

Ниже приведен код для моего ViewController, который встроен в UINavigationController:

class ViewController: UITableViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.searchController = UISearchController(searchResultsController: nil)
  }
}

Снимки экрана:

iOS 13.2 iOS 12.2

EDIT : мне удалось «исправить» новое поведение с помощью нового UINavigationBarAppearance API, ноЯ до сих пор не могу получить оригинальный полупрозрачный вид навигационной панели и заставить ее свернуться.

UINavigationBar.appearance().isTranslucent = true, похоже, не работает вместе с новым API, поэтому я просто отрегулировал цвет, чтобы соответствовать полупрозрачной версии, используяВыбор цвета.

Также, похоже, нет способа правильно свернуть панель поиска.

class AppDelegate: UIResponder, UIApplicationDelegate {
  func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?)
    -> Bool
  {
    if #available(iOS 13.0, *) {
      let appearance = UINavigationBarAppearance()
      appearance.configureWithOpaqueBackground()
      appearance.backgroundColor = .redAdjusted  // adjusted to match the translucent version
      appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
      appearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]

      UINavigationBar.appearance().standardAppearance = appearance
      UINavigationBar.appearance().scrollEdgeAppearance = appearance
    } else {
      UINavigationBar.appearance().tintColor = .white
      UINavigationBar.appearance().barTintColor = .red
      UINavigationBar.appearance().isTranslucent = true
    }
  }
}
...