如何更改仅文本字段的背景颜色? (下图中为红色)
如果使用下面的代码将背景颜色设置为白色,则表示没有足够的顶部填充
searchController.searchBar.backgroundColor = UIColor.white
答案 0 :(得分:2)
请尝试将其更改为搜索栏中文本字段的背景颜色。
我们有很多方法可以做到这一点:
第一种方式:
extension UISearchBar {
private func getViewElement<T>(type: T.Type) -> T? {
let svs = subviews.flatMap { $0.subviews }
guard let element = (svs.filter { $0 is T }).first as? T else { return nil }
return element
}
func setTextFieldColor(color: UIColor) {
if let textField = getViewElement(type: UITextField.self) {
switch searchBarStyle {
case .minimal:
textField.layer.backgroundColor = color.cgColor
textField.layer.cornerRadius = 6
case .prominent, .default:
textField.backgroundColor = color
}
}
}
}
如何使用
searchBar.setTextFieldColor(color: UIColor.green.withAlphaComponent(0.3))
第二种方式:您可以从搜索栏中获取文本字段并直接更改颜色:
在Swift中
for subView: UIView? in searchBar.subviews {
for field: Any? in subView?.subviews ?? [Any?]() {
if (field is UITextField) {
var textField = field as? UITextField
textField?.backgroundColor = UIColor.gray
}
}
}
在Obj-c
for (UIView *subView in _searchBar.subviews) {
for(id field in subView.subviews){
if ([field isKindOfClass:[UITextField class]]) {
UITextField *textField = (UITextField *)field;
[textField setBackgroundColor:[UIColor grayColor]];
}
}
}
答案 1 :(得分:1)
在斯威夫特:
var textField = searchBar.valueForKey("searchField") as? UITextField
textField?.backgroundColor = UIColor.red // Change as per your requirement
答案 2 :(得分:0)
首先你需要在搜索栏下方扩展:
extension UISearchBar {
/// Return text field inside a search bar
var textField: UITextField? {
guard let text = self.value(forKey: "searchField") as? UITextField else {
return nil
}
return text
}
}
然后在你的视图控制器上:
searchBar.textField?.backgroundColor = .red