iOS 13 SearchController 后退按钮颜色

iOS 13 SearchController Back Button Color

我的应用程序中有一个奇怪的视觉错误,它仅适用于 Xcode 11 版本的 iOS 13 运行。我在导航控制器中嵌入了一个 table 视图,默认色调颜色设置为我的应用程序的主要橙色。在 iOS12 上,当您取消搜索操作时,您会看到一个后退按钮,该按钮遵循主橙色的全局导航控制器色调。这是预期的行为。图片如下:

但是,iOS13 中的相同代码会生成系统默认的蓝色后退箭头,如下所示:

我已经尝试了所有方法来尝试覆盖那个蓝色后退按钮,包括创建一个带有自定义操作的自定义条形按钮项目,但这太混乱了,我只想简单地覆盖色调颜色。我尝试了明显的 searchController.searchBar.tintColor = UIColor(named:"Primary"),其中 searchController 是我的 UISearchController,并且我试图覆盖 self.navigationController 色调。我试过以本机方式访问 SearchBar,如下所示:UISearchBar.appearance().tintColor = UIColor(named:"Primary"),但仍然没有成功。我已经尝试了在 IB 中我能想到的所有其他方法,但我无法弄清楚如何达到此后退按钮的色调。有人可以帮忙吗?

试试这个

override func viewWillAppear(_ animated: Bool) {
        self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
        self.navigationItem.backBarButtonItem?.tintColor = .blue
}

到目前为止,我发现修复 iOS13.1 的唯一方法是遍历导航栏中的子视图并手动修改 tintColor。

None 的新 UINavigationBarAppearance 方法看起来可以解决问题。如果您在 UINavigationBarAppearance 中修改了 backButtonAppearance,我已经能够修复后退按钮中的标题,但我还没有找到修复图像的方法 (<)。

在iOS13 中,导航栏的新外观类型很少。当您想要自定义与大标题或任何类型的滚动视图关联的导航栏时,只需为 .scrollEdgeAppearance

设置外观参数
if #available(iOS 13.0, *) {
        let standartAppearence = UINavigationBarAppearance()
        standartAppearence.configureWithDefaultBackground()

        // Your configuration

        UINavigationBar.appearance().scrollEdgeAppearance = standartAppearence
}

原来这是一个 XCode/Swift 错误,只影响 iOS 13.1。它不应该是您必须在代码中考虑的东西,因为只有很小一部分用户群仍在使用 13.1。