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
        }
    }
}

пример кода

Другие вопросы по тегам