【发布时间】:2017-08-13 17:43:22
【问题描述】:
在 iOS 11 之前,我一直在使用以下代码来自定义 UISearchController 搜索栏的外观:
var searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.setDefaultSearchBar()
searchController.searchResultsUpdater = self
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
} else {
tableView.tableHeaderView = searchController.searchBar
}
extension UISearchBar {
func setDefaultSearchBar() {
self.tintColor = UIColor.blue
self.searchBarStyle = .minimal
self.backgroundImage = UIImage(color: UIColor.clear)
let searchBarTextField = self.value(forKey: "searchField") as! UITextField
searchBarTextField.textColor = UIColor.white
searchBarTextField.tintColor = UIColor.blue
searchBarTextField = .dark
}
}
但是,在 iOS 11 上运行相同代码时,搜索栏的外观无法更新。
iOS 10:
iOS 11:
到目前为止,对这个问题的大部分注意力都集中在搜索栏的文本颜色上。我看到的不止这些 - 背景颜色、色调颜色、搜索指示符、清除按钮颜色等。
【问题讨论】:
-
问得好,但如果您采用通过导航栏处理搜索字段的概念,运行时会对其进行处理,我不会感到惊讶。您可以通过将自定义延迟到运行时有机会配置搜索栏本身之后来强制执行您的自定义,但这只是一个猜测,如果这也不起作用,我也不会感到惊讶。
-
您可以使用外观代理实现这种自定义。但是,根据我的经验,它有问题 - 栏一开始看起来和我想要的完全一样,但是当另一个视图控制器隐藏它时,它会失去圆角。
-
尝试将字体外观应用到搜索字段(白色字体颜色)。
-
尝试添加
searchController.searchBar.tintColor = UIColor.white应该可以。 -
你使用的是哪个版本的iOS11?您是否对项目进行了彻底的清理?这可能是操作系统的错误。但是我会尝试复制它并尽快给你反馈......! @NishantBhindi 他已经做到了……
标签: ios swift uisearchcontroller ios11