UISearchController 的 UISearchBar 最初不应用自定义

问题描述

我一直在尝试自定义 UISearcBar。我正在开发的应用程序支持 iOS 11+,因此我决定将 iOS 13 以上和以下的自定义过程分开。这是我正在使用的 UISearchController 的子类;

class SearchController: UISearchController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        dispatchQueue.main.async {
            if #available(iOS 13.0,*) {
                print()
                self.searchBar.tintColor = .richBlueTwo
                self.searchBar.barTintColor = .white
                self.searchBar.searchTextField.backgroundColor = .richBlueTwo
                self.searchBar.searchTextField.textColor = .white
            } else {
                self.searchBar.tintColor = .white
                self.searchBar.barTintColor = .white
                let searchTextField = self.searchBar.value(forKey: "searchField") as? UITextField
                searchTextField?.textColor = .white
                self.searchBar.setimage(UIImage(named: "iconSearch"),for: .search,state: .normal)
            }
        }
    }
}

以及 Controller 中的用法

private var searchController = SearchController(searchResultsController: nil)

override func viewDidLoad() {
    super.viewDidLoad()
    
    navigationItem.searchController = searchController
    navigationItem.hidesSearchBarWhenScrolling = false
    
}

我面临的问题是,当最初加载并出现控制器时,这些更改在激活 UISearchBar 之前不会对 UI 产生任何影响。当点击或点击搜索栏时,颜色和图像会立即更改为它们设置的内容

其他奇怪的事情是,最初状态栏是lightContent。奇怪的是,下面的顺序一直在发生;

  1. UISearchBar 第一次被激活。状态栏保持白色
  2. UISearchBar resignedFirstResponder(取消、清除按钮或点击tableview)。状态栏变成黑色文本
  3. UISearchBar 再次被激活。状态栏又变白了。
  4. 之后每当栏被激活时,状态栏内容为浅色,否则为深色

有什么猜想吗?

解决方法

尝试在 viewWillAppear 函数中进行所有这些更改。

*** 编辑:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        view.addSubview(activityIndicator)
        searchBar.tintColor = .darkGray
        searchBar.placeholder = "Type movie title... "
        searchBar.barTintColor = .black
        navigationController?.navigationBar.barTintColor = .black
        navigationController?.navigationBar.tintColor = .white
        
        activityIndicator.hidesWhenStopped = true
        activityIndicator.center = view.center
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...