无法在使用 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 搜索栏无法激活

UISearchController 打开后,iOS 13 无法滚动到底部

在 UISearchController 中搜索时无法在 tableView 中滚动

无法将 UISearchController 搜索栏添加到导航栏中,并且未调用委托方法

无法以编程方式在我的导航栏中获取 UISearchController

UISearchController 禁用取消 UIBarButtonItem