Hola a la gente que usa UISearchController
y luego adjunta su UISearchBar
al navigationItem.titleView
. He gastado 4-5 horas locas de mi día para resolver esto. Siguiendo el enfoque recomendado por iOS 11+, que está poniendo el searchController
a navigation.searchController
no es lo correcto para mi caso. La pantalla que tiene este searchController / searchBar tiene un backButton, uno personalizado.
He probado esto en iOS 10, iOS 11 y 12. En diferentes dispositivos. Solo tenía que hacerlo. No puedo volver a casa sin resolver este demonio. Esto es lo más perfecto que pude hacer hoy, dada mi fecha límite ajustada.
Así que solo quiero compartir este arduo trabajo que hice, depende de ti poner todo donde quieras (por ejemplo, variables en tu viewModel). Aquí va:
En mi primera pantalla (digamos la pantalla de inicio, que no tiene este controlador de búsqueda), tengo esto en mi viewDidLoad()
.
self.extendedLayoutIncludesOpaqueBars = true
En mi segunda pantalla, la que tiene el searchController, tengo esto en mi viewDidAppear
.
anular func viewDidAppear (_ animado: Bool) {super.viewDidAppear (animado)
let systemMajorVersion = ProcessInfo.processInfo.operatingSystemVersion.majorVersion
if systemMajorVersion < 12 {
self.navigationItem.titleView = self.searchController.searchBar
}
if systemMajorVersion >= 11 {
self.extendedLayoutIncludesOpaqueBars = true
UIView.animate(withDuration: 0.3) {
self.navigationController?.navigationBar.setNeedsLayout()
self.navigationController?.navigationBar.layoutIfNeeded()
}
self.tableView.contentInset = UIEdgeInsets(top: -40, left: 0, bottom: 0, right: 0)
if self.viewHadAppeared {
self.tableView.contentInset = .zero
}
}
self.viewHadAppeared = true
}
y aquí está la declaración de mi searchController:
lazy var searchController: UISearchController = {
let searchController = UISearchController(searchResultsController: nil)
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.textField?.backgroundColor = .lalaDarkWhiteColor
searchController.searchBar.textField?.tintColor = .lalaDarkGray
searchController.searchBar.backgroundColor = .white
return searchController
}()
Así que espero que esto ayude a alguien algún día.