我之前使用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
}
}
Run Code Online (Sandbox Code Playgroud)
但是,更新到iOS 11并添加任何自定义的UISearchController一部分(除了键盘外观证明我的代码已被调用)无法显示.这是一个错误还是我错误地实现了它? navigationItem
编辑: 附件是运行iOS 10(第一个)和iOS 11的设备的两个屏幕截图
编辑2:到目前为止,关于这个问题的大部分注意力都集中在文本的颜色上UISearchBar.我在看比这更多-的背景颜色,色调的颜色,搜索指示器和清除按钮颜色等所有不能尽管是完全能够在iOS的10这么做运行iOS 11的设备上进行定制.
我想在iOS 11搜索栏中嵌入导航栏时更改文本和图标的颜色.所以占位符文本,搜索文本和搜索图标.
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = false
let searchController = UISearchController(searchResultsController: nil)
navigationItem.searchController = searchController
navigationItem.hidesSearchBarWhenScrolling = false
searchController.searchBar.placeholder = "Suchen"
searchController.searchBar.tintColor = .white
}
Run Code Online (Sandbox Code Playgroud)
正如您在图像中看到的那样,文本在深蓝色背景上呈灰色,看起来很难看.我希望文字和图标至少是白色的.(改变蓝色背景颜色也行不通,请看我的其他问题)
唯一有效的方法是改变闪烁光标的颜色和"取消"按钮,这是通过.tintColor属性完成的.
似乎在iOS 10及以下版本中工作的解决方案在iOS 11中似乎不再起作用,因此请仅发布您在iOS 11中工作的解决方案.谢谢.
也许我错过了iOS 11中关于这种"自动样式"的观点.任何帮助都表示赞赏.
如何设置iOS 13的占位符颜色UISearchTextField?
我尝试了以下操作,但均未成功:
searchField.attributedPlaceholder = NSAttributedString(string: "Some placeholder", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])
Run Code Online (Sandbox Code Playgroud)
这是当前Beta中的错误,还是我错过了什么?我正在使用Xcode 11,beta 7。