在 UISearchController 中按取消后导航栏被阻塞

Navigation bar gets blocked after pressing Cancel in UISearchController

我正在为 iOS 13 准备应用程序,发现导航栏中的搜索控制器存在错误。如何解决导航栏故障?

let search = UISearchController(searchResultsController: nil)

search.dimsBackgroundDuringPresentation = false
search.searchResultsUpdater = self
search.hidesNavigationBarDuringPresentation = false
self.definesPresentationContext = true
search.searchBar.isTranslucent = false

self.navigationItem.searchController = search

self.navigationItem.hidesSearchBarWhenScrolling = true

按“取消”,导航栏项目变得不可触摸。 推送视图控制器导致导航栏项目重叠。

我已经在 git https://github.com/eKroman/TESTsearchBar

上创建了测试项目

错误出现在 iOS 13 beta(在 iPad 上测试)使用从 Xcode 11 从 beta 7(可能是旧 beta)到 Xcode 11 GM seed 2 . 不出现在模拟器上。

我遇到了同样的问题,如果我取消searchBar并更改navigationItem.title那么我有一个双标题。就像导航栏的幽灵层留在导航控制器中。

我是这样修复的:

searchController.hidesNavigationBarDuringPresentation = true

在 Apple 解决此问题之前最好使用它。

我还注意到后退按钮切换为默认颜色(蓝色),就好像导航栏 TintColor 已重置一样。

配置: - Xcode 11.0 (11A420a) - iOS 13.1 (17A5844a)

对于@CoachThys 的回答中的后退按钮重置为默认颜色(蓝色),我设法通过下面的代码解决了这个问题。

if #available(iOS 13.0, *) {
    let appearance = UINavigationBarAppearance()
    /* .. set other things on appearances */
    appearance.buttonAppearance.normal.titleTextAttributes = [.foregroundColor: color]

    standardAppearance = appearance
    compactAppearance = appearance
    scrollEdgeAppearance = appearance
}

但是,我找不到解决后退指示器图像的方法,它仍然短暂地重置为蓝色。

添加带有图像的自定义后退按钮将修复新错误。对我来说效果很好。

        let negativeSpacer = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
        negativeSpacer.width = -8
        self.navigationItem.leftBarButtonItems = [negativeSpacer, leftBarButtonItem]