UISearchController 的 UISearchBar 最初不应用自定义
UISearchController's UISearchBar does not apply customizations initially
我一直在尝试自定义 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
。奇怪的是,以下序列不断发生;
UISearchBar
是第一次激活。状态栏保持白色
UISearchBar
resignedFirstResponder(取消、清除按钮或点击表格视图)。状态栏变成黑色文字
UISearchBar
再次激活。状态栏又变白了。
- 之后每当激活栏状态栏内容为浅色,否则为深色
有什么猜测吗?
尝试在 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
}
我一直在尝试自定义 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
。奇怪的是,以下序列不断发生;
UISearchBar
是第一次激活。状态栏保持白色UISearchBar
resignedFirstResponder(取消、清除按钮或点击表格视图)。状态栏变成黑色文字UISearchBar
再次激活。状态栏又变白了。- 之后每当激活栏状态栏内容为浅色,否则为深色
有什么猜测吗?
尝试在 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
}