У меня есть интерактивное перелистывание в моем приложении и экран с UISearchController и LargeTitle:
Вот инициализация 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
}