无法在使用UISearchController实现的搜索栏中更改TF的背景颜色

时间:2018-04-17 08:09:21

标签: ios swift uisearchcontroller searchbar

如何更改仅文本字段的背景颜色? (下图中为红色)

enter image description here

如果使用下面的代码将背景颜色设置为白色,则表示没有足够的顶部填充 searchController.searchBar.backgroundColor = UIColor.white

enter image description here

3 个答案:

答案 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