【问题标题】:iOS 13 SearchController Back Button ColoriOS 13 SearchController 后退按钮颜色
【发布时间】:2020-02-11 10:55:03
【问题描述】:

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

但是,iOS13 中同样的代码会产生一个系统默认的蓝色后退箭头,如下图:

我已经尽一切努力尝试覆盖那个蓝色后退按钮,包括使用自定义操作创建一个自定义条形按钮项,但这太混乱了,我只想简单地覆盖色调颜色。我已经尝试了明显的searchController.searchBar.tintColor = UIColor(named:"Primary"),其中 searchController 是我的 UISearchController,并且我尝试覆盖 self.navigationController 色调。我尝试过本地访问 SearchBar,如下所示:UISearchBar.appearance().tintColor = UIColor(named:"Primary"),但仍然没有运气。我已经尝试了 IB 中我能想到的所有其他方法,但我不知道如何达到这个后退按钮的色调。有人可以帮忙吗?

【问题讨论】:

  • 如果其他人不知道,苹果似乎已经在 13.2 更新中修复了这个错误。
  • 可以确认。 13.2 修复了这个问题。

标签: swift xcode ios13 xcode11 swift5


【解决方案1】:

事实证明,这是一个仅影响 iOS 13.1 的 XCode/Swift 错误。这不应该是您必须在代码中考虑的事情,因为只有很小一部分用户群仍在使用 13.1。

【讨论】:

    【解决方案2】:

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

    if #available(iOS 13.0, *) {
            let standartAppearence = UINavigationBarAppearance()
            standartAppearence.configureWithDefaultBackground()
    
            // Your configuration
    
            UINavigationBar.appearance().scrollEdgeAppearance = standartAppearence
    }
    

    【讨论】:

      【解决方案3】:

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

      新的UINavigationBarAppearance 方法似乎都没有解决问题。如果您修改了UINavigationBarAppearance 中的backButtonAppearance,我已经能够修复后退按钮中的标题,但我还没有找到修复图像的方法(

      【讨论】:

        【解决方案4】:

        试试这个

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

        【讨论】:

        • 没什么。我把它放在viewWillAppear中,然后在我附加我的searchController之前和之后我都在viewDidLoad中尝试过,它没有任何效果。
        • 这似乎是 iOS13.1 中的一个错误,您可以尝试使用 Apple 的任何应用程序,您会得到相同的行为。例如,如果您尝试使用 Notes 应用程序,您将看到相同的行为。
        • 哦,哇,你是对的。即使是第一方 Apple 应用程序也会表现出这种行为。真是笑话。这些东西怎么能通过几个月的测试而不被修复?可笑。