2016-09-02 8 views
0

Есть ли способ изменить высоту текстового поля UISearchBar?Изменение UITextField height в UISearchBar - Swift 3

я могу получить доступ к TextField, как это и хотя изменения цвета фона, ничто не кажется, изменения с точки зрения кадров/размер ...

Я был в состоянии изменить высоту SearchBar в IB, устанавливая ограничения. Но TextField остался прежним (44) ...

override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 
     self.mySearchBar.layoutIfNeeded() 
     self.mySearchBar.layoutSubviews() 
     self.mySearchBar.backgroundColor = UIColor.blue 

     for subView in mySearchBar.subviews 
     { 
      for subsubView in subView.subviews 
      { 
       if let textField = subsubView as? UITextField 
       { 
        var currentTextFieldBounds = textField.bounds 
        textField.borderStyle = UITextBorderStyle.none 
        currentTextFieldBounds.size.height = self.mySearchBar.bounds.height-10 

        textField.bounds = currentTextFieldBounds 

        textField.backgroundColor = UIColor.red 

       } 
      } 
     } 

enter image description here

+0

Вы нашли решение? –

ответ

0

The UITextField в UISearchBar не является непосредственно доступным. Вы можете создать свой собственный подкласс UISearchBar, чтобы эмулировать обычную панель поиска. Вы можете полностью настроить пользовательский интерфейс по своему усмотрению либо с помощью построителя интерфейса, либо программно.

protocol SearchBarEventDelegate { 
    func searchButtonPressed(searchBar: CustomSearchBar) 
    func searchBarDidReceiveInput(searchText: String) 
    func searchBarDidBackspace(searchText: String) 
} 

class CustomSearchBar: UIView { 

    var searchTextField: UITextField? 
    var delegate : SearchBarEventDelegate? 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     addSubview(searchTextField()) 
    } 

    func searchTextField() -> UITextField { 
     //Input custom frame and attributes here. 
     let textField = UITextField(frame: CGRectZero) 
     textField.delegate = self 
     return textField 
    } 
} 

extension CustomSearchBar : UITextFieldDelegate { 
    //Implement Textfield delegate methods here. 
    //Propagate events to CustomSearchBar delegate. Example Provided. 
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
     let partialSearchString = textField.text! 
     let fullSearchString = (partialSearchString as NSString).stringByReplacingCharactersInRange(range, withString: string) 

     if(range.length == 1) { 
      delegate?.searchBarDidBackspace(fullSearchString) 
     } else { 
      delegate?.searchBarDidReceiveInput(fullSearchString) 
     } 

     return true 
    } 
} 
+0

Благодарим вас за пример. Я не могу принять ответ, хотя при попытке реализовать в Swift 3 существует множество ошибок. –

Смежные вопросы