UISearchController's UISearchBar понижаются - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть интерактивное перелистывание в моем приложении и экран с UISearchController и LargeTitle:

enter image description here enter image description here

Вот инициализация SearchController :

let searchC = UISearchController(searchResultsController: nil)
searchC.searchBar.delegate = self as? UISearchBarDelegate
searchC.hidesNavigationBarDuringPresentation = false
searchC.dimsBackgroundDuringPresentation = false
self.navigationItem.searchController = searchC

Я использую UIPercentDrivenInteractiveTransition? и пользовательские PanGesture.

Также я попытался установить на верхний уровень VC:

definesPresentationContext = true
providesPresentationContextTransitionStyle = true
view.clipsToBounds = true

Когда пользователь делает жест, чтобы выскочить, но не заканчивает его, возникает ошибка. Это означает, что это означает, что когда контроллер собирается выдвигаться, и он вызывает viewWillDisappear и viewWillAppear, что-то происходит.
Я все еще не могу это исправить, любая помощь?

Относительная информация, которую можно попробовать или прочитать:
UISearchController не работает должным образом с непрозрачной панелью UINavigationBar
Пользовательский UISearchBar с UISearchController
Пользовательская анимация UISearchController
Что определяетPresentationContext и предоставляетPresentationContextTransitionStyle
https://medium.com/whoknows-swift/swift-the-hierarchy-of-uinavigationcontroller-programmatically-91631990f495
https://www.bignerdranch.com/blog/wwdc-2017-large-titles-and-safe-area-layout-guides/


Есть обходной путь, но он не идеален:

public var searchController: UISearchController?
fileprivate var isSearchControllerActive: Bool = false

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    self.navigationItem.searchController = searchController
    if let sc = searchController, isSearchControllerActive {
        self.present(sc, animated: true, completion: nil)
        isSearchControllerActive = false
    }
}

override func viewWillDisappear(_ animated: Bool) {
    isSearchControllerActive = searchController?.isActive ?? false
    searchController?.dismiss(animated: false, completion: nil)        
    super.viewWillDisappear(animated)

    self.navigationItem.searchController = nil
}
...