Как изменить ширину и высоту UISearchBar в Swift? - PullRequest
0 голосов
/ 30 октября 2018

Я хочу настроить высоту и ширину searchBar в моем приложении. Я попробовал какое-то решение от SO, но что-то не так в настройке ширины и высоты панели поиска. Когда я собираю и запускаю приложение, изображение ниже выглядит как мой searchBar, как я и хотел выглядеть. Высота 70, ширина 714.

enter image description here

Но когда я нажал searchBar и начал печатать текст, размер уменьшился до высоты. Пожалуйста, смотрите 2-е изображение ниже.

enter image description here

Затем, когда я нажал кнопку отмены, он вернулся к виду по умолчанию UISearchBar. Пожалуйста, смотрите 3-е изображение ниже.

enter image description here

Как я могу изменить ширину и высоту searchBar навсегда, не испытывая автоматическую настройку во время ввода текста или нажатия кнопки отмены. Пожалуйста, посмотрите на мои коды для справки. Надеюсь, ты сможешь мне помочь. Спасибо.

 private var searchBar: UISearchBar!
 let searchController = UISearchController(searchResultsController: nil)

 override func viewDidLoad() {
    super.viewDidLoad()

 configureSearchBar()

 searchController.searchBar.frame = CGRect(x: 15, y: 100, width: 714, height: 100)

 }

  override func viewDidAppear(_ animated: Bool) {

  let searchTextField: UITextField = searchController.searchBar.subviews[0].subviews.last as! UITextField
    searchTextField.layer.cornerRadius = 10
    searchTextField.textAlignment = NSTextAlignment.left
    searchTextField.placeholder = "Search by Name, Department or Employee Number"

    searchTextField.rightViewMode = UITextFieldViewMode.always
}

//MARK: Function
func configureSearchBar() {

    searchController.searchResultsUpdater = self
    searchController.dimsBackgroundDuringPresentation = false
    definesPresentationContext = true

    searchController.searchBar.textColor = UIColor.black
    searchController.searchBar.placeholder = "Search by name, department or employee number"
    searchController.searchBar.searchBarStyle = .prominent
    searchController.searchBar.barTintColor = UIColor(red: 26/255.0, green: 99/255, blue: 42/255, alpha: 1.0)
    searchController.searchBar.tintColor = UIColor.black
    searchController.searchBar.backgroundColor = UIColor(red: 255/255.0, green: 255/255, blue: 255/255, alpha: 1.0)
    searchController.searchBar.setImage(#imageLiteral(resourceName: "search"), for: .search, state: .normal)
    let margins = searchController.searchBar.layoutMarginsGuide
    searchController.searchBar.leadingAnchor.constraint(equalTo: margins.leadingAnchor, constant: 20).isActive = true


    searchController.searchBar.isTranslucent = true

    if #available(iOS 11.0, *) {
        searchController.searchBar.heightAnchor.constraint(equalToConstant: 100).isActive = true

    }

    self.ParticipantTableView.tableHeaderView = searchController.searchBar
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    searchController.searchBar.layoutIfNeeded()
    searchController.searchBar.layoutSubviews()

    _ = searchController.searchBar.frame
    let newheight: CGFloat = 70
    let newWidth: CGFloat = 714


    for subView in searchController.searchBar.subviews
    {
        for subsubView in subView.subviews
        {
            if let textField = subsubView as? UITextField
            {
                var currentTextFieldBounds = textField.bounds
                currentTextFieldBounds.size.height = newheight
                currentTextFieldBounds.size.width = newWidth
                textField.bounds = currentTextFieldBounds

                textField.borderStyle = UITextBorderStyle.roundedRect
            }
        }
    }

}


 extension ParticipantsViewController: UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
    filterContentForSearchText(searchText: searchController.searchBar.text!)
    }
 }

extension UISearchBar {

var textColor: UIColor? {
    get {
        if let textField = self.value(forKey: "searchField") as? UITextField {
            return textField.textColor
        }else {
            return nil
        }
    }

    set (newValue) {
        if let textField = self.value(forKey: "searchField") as? UITextField {
            textField.textColor = newValue
            textField.font = UIFont(name: "HelveticaNeue", size: 25.0)
        }
    }
}
...