无法在使用 UISearchController 实现的搜索栏中更改 TF 的背景颜色
Posted
技术标签:
【中文标题】无法在使用 UISearchController 实现的搜索栏中更改 TF 的背景颜色【英文标题】:Unable to change background color of TF in search bar implemented using UISearchController 【发布时间】:2018-04-17 08:09:20 【问题描述】:如何更改仅文本字段的背景颜色? (下图中为红色)
如果使用下面的代码将背景颜色设置为白色,则顶部填充不足
searchController.searchBar.backgroundColor = UIColor.white
【问题讨论】:
【参考方案1】:请尝试使用此方法更改搜索栏中文本字段的背景颜色。
我们有很多方法可以做到这一点:
第一种方式:
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]];
【讨论】:
您是否故意在答案中混合使用 Swift 和 Objective-C 代码? :)【参考方案2】:首先你需要下面的搜索栏扩展:
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
【讨论】:
非常感谢!这肯定是灵丹妙药。【参考方案3】:在斯威夫特中:
var textField = searchBar.valueForKey("searchField") as? UITextField
textField?.backgroundColor = UIColor.red // Change as per your requirement
【讨论】:
以上是关于无法在使用 UISearchController 实现的搜索栏中更改 TF 的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章
UISearchController 打开后,iOS 13 无法滚动到底部
在 UISearchController 中搜索时无法在 tableView 中滚动
无法将 UISearchController 搜索栏添加到导航栏中,并且未调用委托方法