UISearchbar UI в iOS 12 и 13 отличается и не правильно - PullRequest
0 голосов
/ 27 февраля 2020

Пользовательский интерфейс в моей панели поиска ведет себя не так, как ожидалось.

Я хочу, чтобы это выглядело так:

enter image description here

В iOS 13 это выглядит так:

enter image description here

И в iOS 12 это выглядит так:

enter image description here

Я настраиваю панель поиска в ViewDidLoad следующим образом:

    guard let searchField = searchBar.value(forKey: "searchField") as? UITextField else { return }

    searchBar.backgroundColor = .red
    searchField.backgroundColor = UIColor.black.withAlphaComponent(0.3)
    searchField.textColor = .white
    searchField.leftView?.tintColor = .white
    searchField.attributedPlaceholder = NSAttributedString(string: "Search", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white])

1 Ответ

0 голосов
/ 27 февраля 2020

Я пытался создать панель поиска, но не проверял ее. Вы можете найти ответы на свои вопросы из фрагмента кода. Вам также необходимо добавить расширение UISearchBar в свой проект, чтобы использовать некоторые методы во фрагменте.

searchBar.tintColor = UIColor.white
searchBar.searchBarStyle = .default
searchBar.placeholder = "Search"
searchBar.setTextFieldPlaceholderColor(color: UIColor.white)
searchBar.backgroundColor = UIColor.red
searchBar.setImage(UIImage(named:"searchIcon"), for: .search, state: .normal)
if #available(iOS 13.0, *) {
    searchBar.searchTextField.backgroundColor = UIColor.black.withAlphaComponent(0.3)
    searchBar.setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
    searchBar.searchTextField.textColor = UIColor.white
    searchBar.searchTextField.font = UIFont.systemFont(ofSize: 12)
} else {
    searchBar.removeBackgroundImageView()
    searchBar.setTextFieldBackground(color: UIColor.black.withAlphaComponent(0.3))
}

UISearchBar extension

extension UISearchBar {

    //use for iOS 12 and below
    func removeBackgroundImageView(){
        if let view:UIView = self.subviews.first {
            for curr in view.subviews {
                guard let searchBarBackgroundClass = NSClassFromString("UISearchBarBackground") else {
                    return
                }
                if curr.isKind(of:searchBarBackgroundClass){
                    if let imageView = curr as? UIImageView{
                        imageView.removeFromSuperview()
                        break
                    }
                }
            }
        }
    }

    func setTextFieldBackground(color : UIColor) {
        for subView in self.subviews {
            for subView1 in subView.subviews {
                if subView1.isKind(of: UITextField.self) {
                    subView1.backgroundColor = color
                    (subView1 as? UITextField)?.font = UIFont.systemFont(ofSize: 12)
                }
            }
        }
    }

    func setTextFieldPlaceholderColor(color : UIColor) {
        for subView in self.subviews {
            for subView1 in subView.subviews {
                if subView1.isKind(of: UITextField.self) {
                    if let placeholder = (subView1 as! UITextField).placeholder {
                        (subView1 as! UITextField).attributedPlaceholder = NSAttributedString(string:placeholder,attributes: [NSAttributedString.Key.foregroundColor: color])
                    }
                }
            }
        }
    }
}
...