2016-09-02 20 views
0

には、UISearchBarのtextFieldの高さを変更する方法がありますか?UISearchBarのSwift 3でUITextFieldの高さを変更する

私はこのようなテキストフィールドにアクセスすることができ、背景色が変わりますが、何もフレーム/サイズの点で変更することがないようで...

私は制約を設定することにより、IBでの検索バーの高さを変更することができました。 しかしUISearchBar内のテキストフィールド(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

UITextFieldは直接アクセスすることはできません。独自のUISearchBarサブクラスを作成して、通常の検索バーをエミュレートすることができます。インターフェイスビルダまたはプログラマチックに適合しているように、UIを完全にカスタマイズすることができます。

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に実装しようとすると何度も間違いがあります。 –

関連する問題