UISearchController / UINavigationBar 在 UINavigationController 中使用时显示损坏的动画

UISearchController / UINavigationBar shows broken animation when used within UINavigationController

我有这顶 NavigationController 帽子,它的 NavigationBar 启用了大标题。根 ViewController 有一个 SearchController,并且 hidesSearchBarWhenScrolling 在 ViewControllerNavigationItem 中设置为 True,因为我不希望 SearchBar 总是可见的。 ViewController 有一个 TableView,当您点击其中一项时,相同 ViewController 的一个新实例将使用故事板转场推送到导航堆栈上。但是,当查看当前 ViewController 和新 ViewController 之间的过渡时,可以观察到动画看起来不正确:一旦新 ViewControllerSearchBar 中移动,动画就会变成空的,只显示它的背景。当新的 ViewController 最终完全可见时,SearchBar 将在没有任何动画的情况下消失。

这就是我添加 SearchController 的方式(这里没什么特别的):

class MyViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let searchController = UISearchController(searchResultsController: nil)
        navigationItem.searchController = searchController
        navigationItem.hidesSearchBarWhenScrolling = true
    }
}

所以当从 "One" 导航到 "Two" 时看起来像:

UISearchController / UINavigationBar shows broken animation when used within UINavigationController

有没有办法让它看起来更漂亮?当然,在新的 ViewController 中,SearchBar 最初不应该是可见的,所以它必须以某种方式消失。但我认为旧 ViewController 上的 SearchBar 可能应该以某种方式淡出,而不是停留在那里,然后在向新 ViewController 的过渡完成时突然隐藏起来。希望我只是在这里做错了什么......

谢谢大家,祝大家圣诞快乐,

彼得

尝试在 viewWillDissappear 方法中将搜索控制器设置为 nil。

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.navigationItem.searchController = nil
}

嗯,我终于找到了一些非常有用的东西,但在问我的问题之前我找不到:

太糟糕了,这是自 iOS 11 以来就知道的,但仍未修复。