我想在应用程序中调整searchBar
的高度和宽度。我从SO尝试了一些解决方案,但是在调整搜索栏的宽度和高度时出现了问题。当我构建并运行该应用程序时,下图是searchBar
的外观,这就是我想要的外观。高度是70,宽度是714。
但是,当我点击searchBar
并开始键入文本时,其大小将调整为较小的高度。请参阅下面的第二张图片。
然后,当我点击“取消”按钮时,它会恢复为默认外观UISearchBar
。请参见下面的第三张图片。
在键入文本或点击取消按钮时,如何在不进行自动调整的情况下永久修改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)
}
}
}