簡體   English   中英

無法在使用UISearchController實現的搜索欄中更改TF的背景顏色

[英]Unable to change background color of TF in search bar implemented using UISearchController

如何更改textfield的背景顏色? (下圖中為紅色)

在此輸入圖像描述

如果使用下面的代碼將背景顏色設置為白色,則沒有足夠的頂部填充searchController.searchBar.backgroundColor = UIColor.white

在此輸入圖像描述

請嘗試此操作以更改搜索欄中文本字段的背景顏色。

我們有很多方法可以做到這一點:

第一種方式:

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))

第二種方式:您可以從搜索欄中獲取文本字段並直接更改顏色:

在斯威夫特

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中:

var textField = searchBar.valueForKey("searchField") as? UITextField
textField?.backgroundColor = UIColor.red   // Change as per your requirement

首先你需要在搜索欄下方擴展:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM