我正在以编程方式呈现一个UISearchController,而不将其添加到navigationItem中。日历应用程序执行类似操作。
如果没有呈现上下文,搜索栏会正确显示,但在推送另一个视图控制器后保留。
这是预期的,所以我们需要在列表视图控制器上设置definesPresentationContext
... 但这会导致搜索栏呈现不正确。
这是设置呈现上下文的代码:
private lazy var searchController: UISearchController! = {
let searchController = UISearchController(searchResultsController: nil)
searchController.obscuresBackgroundDuringPresentation = false
// If this is set to true, the search bar animates correctly, but that's
// not the effect I'm after. See the next video.
searchController.hidesNavigationBarDuringPresentation = false
return searchController
}()
override func viewDidLoad() {
super.viewDidLoad()
definesPresentationContext = true
searchButton.rx.tap.subscribe(onNext: { [unowned self] in
present(searchController, animated: true)
}).disposed(by: disposeBag)
}
使用hidesNavigationBarDuringPresentation
可以解决问题,但我们会失去选项卡栏,并且整个界面看起来不太好。
我尝试了此解决方案 (无法呈现UISearchController),但没有帮助。
有什么建议吗?
更新:问题更具体地说是,搜索栏出现在透明导航栏后面。将导航栏设置为不透明(navigationController?.navigationBar.isTranslucent = false
)则搜索栏显示在导航栏下面。