iOS 13:关闭导航项上的UISearchController会导致tintColor恢复为默认值

时间:2019-10-16 11:29:26

标签: uisearchcontroller ios13 tintcolor

我在导航项上使用UISearchController(导航栏已设置为使用barTintColor和tintColor)。关闭搜索控制器后(点击搜索栏的“取消”按钮),后退按钮的tintColor将恢复为默认值(蓝色)。

屏幕截图1:导航栏的tintColor为.white enter image description here

截屏2:当UISearchController处于活动状态时: enter image description here

截屏3:当UISearchController被关闭(通过点击“取消”)时,您会看到“后退”按钮的tintColor被恢复为默认值(蓝色),而不是白色: enter image description here

屏幕截图上的代码为:


/// View controller is embedded in a UINavigationController, the root view controller of the startup storyboard.
class ViewController: UIViewController {

  lazy var searchController: UISearchController = {
    let controller = UISearchController(searchResultsController: nil)
    controller.searchBar.tintColor = .white
    return controller
  }()

  override func viewDidLoad() {
    super.viewDidLoad()
    if let navigationBar = navigationController?.navigationBar {
      setupNavigationBar(navigationBar)
    }
    if #available(iOS 11.0, *) {
      navigationItem.searchController = searchController
    } else {
      navigationItem.titleView = searchController.searchBar
    }
  }

  func setupNavigationBar(
    _ navigationBar: UINavigationBar,
    barTintColor: UIColor = .red,
    tintColor: UIColor = .white,
    textColor: UIColor = .white,
    prefersLargeTitles: Bool = true,
    isTranslucent: Bool = false) {

    navigationBar.isTranslucent = isTranslucent
    navigationBar.barTintColor = barTintColor

    if #available(iOS 11.0, *) {
    } else {
      navigationBar.setBackgroundImage(UIImage(), for: .default)
    }
    navigationBar.shadowImage = UIImage()

    navigationBar.tintColor = tintColor
    navigationBar.titleTextAttributes = [
      .font: UIFont.preferredFont(forTextStyle: .headline),
      .foregroundColor: textColor
    ]

    if #available(iOS 11.0, *) {
      navigationBar.prefersLargeTitles = prefersLargeTitles
      navigationBar.largeTitleTextAttributes = [
        .font: UIFont.preferredFont(forTextStyle: .largeTitle),
        .foregroundColor: textColor
      ]
    }

    if #available(iOS 13.0, *) {
      let navBarAppearance = UINavigationBarAppearance()
      navBarAppearance.configureWithOpaqueBackground()
      navBarAppearance.titleTextAttributes = navigationBar.titleTextAttributes ?? [:]
      navBarAppearance.largeTitleTextAttributes = navigationBar.largeTitleTextAttributes ?? [:]
      navBarAppearance.backgroundColor = barTintColor
      navBarAppearance.shadowColor = barTintColor
      navigationBar.standardAppearance = navBarAppearance
      navigationBar.scrollEdgeAppearance = navBarAppearance
    }

  }

}

1 个答案:

答案 0 :(得分:5)

我有同样的问题。尝试了所有修复程序。结果是这肯定是 iOS 13错误,因为即使是像Notes之类的系统应用程序也一样。希望苹果会在下一个iOS更新中对其进行修复。

以下是Notes应用程序的屏幕截图。

在点击搜索栏中的取消按钮之前

Step 1

点击“取消”后

Step 2

更新。 iOS 13.2已发布,并且此错误似乎已修复✅