2017-06-07 3 views
0

私は次のコードを使用して、キーボードが表示されたら、ビューを上に移動しようとしています:キーボードの高さ - スウィフト

func keyboardWillShow(notification: NSNotification) { 
if let keyboardSize: CGSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size { 

      if self.view.frame.origin.y == 0{ 
       print("Keyboard height is: \(keyboardSize.height)") 

       let keyboardHeight = keyboardSize.height - (self.tabBarController?.tabBar.frame.height)! 
       self.view.frame.origin.y -= (keyboardHeight) 
       print("Keyboard height is: \(keyboardSize.height)") 

     } 
    } 
} 

アプリが開かれた後、この関数が呼び出された最初の時間をキーボードの高さは0として設定されます。これは、ビューがtabBarの高さだけ落ちることを意味します。ビューをリロードすると、それ以降は完全に動作します。

キーボードが実際に開かれるまでキーボードの高さが上がっていないようですが、これは機能の最初の実行には遅すぎます。

問題は何ですか?詳細をご希望の場合はお知らせください。

答えて

4

UIKeyboardFrameBeginUserInfoKeyの代わりにUIKeyboardFrameEndUserInfoKeyを使用してください。

+0

ありがとうございました。私もそれを試しましたが、違いはありません。あなたがそれが違いをもたらすと思うなら、これはTabViewController内で起こっていますか? –

+0

私のために働いた ありがとう... !! –

0

私が使用しています。この3.0 SWIFTは表示

func keyboardWillHide(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 

     if (iskeyboard) 
     { 
      self.view.frame.origin.y += keyboardSize.height 
     } 
     iskeyboard = false 
    } 
} 
+0

ありがとうございますが、あなたのコードでも同じことが起こっています。私はどこでもStackoverflowのいずれかの情報を見つけることができませんでした...非常に混乱。 –

1

のためのショー

func keyboardWillShow(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 

     if (!iskeyboard) 
     { 
      self.view.frame.origin.y -= keyboardSize.height 
     } 
     iskeyboard = true 

    } 
} 

ため

var iskeyboard : Bool = false; 

最初

@objc private func keyboardWillShow(_ notification: Notification){ 
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue 
{ 
    print("keyboardSize.height = ",keyboardSize.height) 
} } 
関連する問題