如何在Swift中修改UISearchBar的宽度和高度?

时间:2018-10-30 03:37:46

标签: ios swift uisearchbar uisearchcontroller

我想在应用程序中调整searchBar的高度和宽度。我从SO尝试了一些解决方案,但是在调整搜索栏的宽度和高度时出现了问题。当我构建并运行该应用程序时,下图是searchBar的外观,这就是我想要的外观。高度是70,宽度是714。

enter image description here

但是,当我点击searchBar并开始键入文本时,其大小将调整为较小的高度。请参阅下面的第二张图片。

enter image description here

然后,当我点击“取消”按钮时,它会恢复为默认外观UISearchBar。请参见下面的第三张图片。

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

0 个答案:

没有答案