2016-11-07 11 views
0

デバイスのキーボードの高さを取得して、同じ高さのオブジェクトを構築したいと考えています。これらのオブジェクトは、キーボードが実際に表示される前にそこに存在するので、thisのようなメソッドを使用することはできません。実際に出現することなくキーボードの高さを得る方法があるのだろうかと思っていましたか?表示される前にキーボードの高さを取得する

+0

func keyboardWillShow(_ notification:Notification) { let userInfo:NSDictionary = (notification as NSNotification).userInfo! as NSDictionary let keyboardFrame:NSValue = userInfo.value(forKey: UIKeyboardFrameEndUserInfoKey) as! NSValue let keyboardRectangle = keyboardFrame.cgRectValue keyboardHeight = keyboardRectangle.height } 

を与える負荷

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 

別の関数をしましたキーボーアが何であるか知っているrdサイズは表示されるまでになります。ユーザーがカスタムキーボードをインストールしているか、キーボードを切り替えている可能性があります。キーボードによっては高さが異なるものや、ツールバーがあるものがあります。 – rmaddy

答えて

0

Ivも同様の問題がありました。私は最初にキーボードが表示されなくてもキーボードの高さを得る方法を見つけることはできませんが、周りに道があります。ビュー内の

var keyboardHeight = CGFloat() 
var keyboardFirstTime = true 

あなたは「あなたができるので、リンクされたアプローチを使用する必要があり、キーボードの高さにtextFieldDidBeginEditing

func textFieldDidBeginEditing(_ textField: UITextField) 
{ 
    //adds .01 delay to wait and assign keyboard height for the first time 
    if keyboardFirstTime == true 
    { 
     let when = DispatchTime.now() + 0.01 
     DispatchQueue.main.asyncAfter(deadline: when) 
     { 
      UIView.animate(withDuration: 0.25, delay: 0, options: [.curveEaseOut], animations: 
       { 
       self.searchField.frame.origin.y = self.view.frame.height - self.keyboardHeight - self.searchField.frame.size.height 
       }, completion: nil) 
     } 
     keyboardFirstTime = false 
    } 
    else 
    { 
     UIView.animate(withDuration: 0.3, delay: 0, options: [.curveEaseOut], animations: 
      { 
       self.searchField.frame.origin.y = self.view.frame.height - self.keyboardHeight - self.searchField.frame.size.height 
      }, completion: nil) 
    } 

    textField.text = "" 
} 
+0

keyboardFirstTimeブール値は非常に小さな遅延を追加します。これにより、キーボードの高さを計算してvarに設定するのに十分な時間がコードに与えられます。 –

関連する問題