UISearchController в панели навигации не может правильно скрыться на iOS 11
Я хочу скрыть панель навигации после нажатия
navigationController?.hidesBarsOnTap = true
Панель навигации правильно скрывается после нажатия
Но после добавления searchController (код ниже)
let searchController = UISearchController(searchResultsController: nil)
navigationItem.searchController = searchController
Мой взгляд (голубой цвет) не может быть правильно расширен
И я тоже попробовал повернуть его. Появляется панель поиска.
1 ответ
Решение
Наконец нашел решение
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.barHideOnTapGestureRecognizer.addTarget(self, action: #selector(barHideAction(_:)))
let searchController = UISearchController(searchResultsController: nil)
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
navigationController?.hidesBarsOnTap = true
}
@objc func barHideAction(_ guesture: UITapGestureRecognizer) {
updateFrame()
}
func updateFrame() {
if let nc = navigationController {
let isHidden = nc.isNavigationBarHidden
searchController.searchBar.superview?.isHidden = isHidden
if isHidden {
self.additionalSafeAreaInsets.top = -64 // fixed by a magic num
}
else {
self.additionalSafeAreaInsets.top = 0
}
}
}