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

}

我面临的问题是,当最初加载控制器并出现时,这些更改在UI中没有任何影响,直到UISearchBar被激活。当有点击或点击搜索栏,颜色和图像会立即改变为他们已经设置。

另一个奇怪的事情是,最初的状态栏是lightContent。奇怪的是,下面的序列一直在发生;

  1. UISearchBar第一次激活。状态栏保持白色
  2. UISearchBarresignedFirstResponder(取消,清除按钮或点击到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
}

最新更新