2017-10-17 15 views
0

最初のレスポンダを取得したばかりの要素をキーボードがカバーしているときに、ビューを移動するという問題に取り組んでいます。私はthis questionを見て始め、それは私に素晴らしいスタートを与えました。これは、テキストフィールドがファーストレスポンダを獲得したときに表示が上下に移動しているという意味では正常に動作しますキーボードが表示されたときのUIViewの管理

func keyboardWillShow(notification: Notification) { 

     guard let userInfo = notification.userInfo, 
       let kbRect = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue, 
       let duration = userInfo[UIKeyboardAnimationDurationUserInfoKey] as? Double else { 
      return 
     } 

     let kbSize = kbRect.cgRectValue.size 

     UIView.animate(withDuration: duration) { 
      self.view.transform = CGAffineTransform(translationX: 0, y: -kbSize.height) 
     } 
    } 

    func keyboardWillHide(notification: Notification) { 
     UIView.animate(withDuration: 0.3) { 
      self.view.transform = CGAffineTransform(translationX: 0, y: 0) 
     } 
    } 

: はUIKeyboardWillShowUIKeyboardWillHideにオブザーバーを追加した後、私は次のコードで終了しました。 しかし、キーが押されると、ビューは再び動き、最初の場所に移動するという目的を破ります。 キーボードが表示されて消えて初めて正しく動作するように、この望ましくない動作をよりよく説明するために少しGIFを作成しました.2回目にキーを押すと、望ましくない動作が表示されます。

problem presented

だから、質問は、キーが押されたとき、私は、ビューの移動を防ぐことができる方法はありますか?ユーザーがテキストを挿入するためにキーボードを使用しているときにビューを "上"にしておきたいです。

ビューアプリを移動する必要があり
+0

この画像はどのように設定しましたか?そこにはどんな制約がありますか? –

+0

@Lu_それはすべてのビューで私に起こる、そのイメージ私は問題を説明するために行ったUIViewだけのテストです。画像上の制約は、トップビュー、スーパービューの先頭と末尾、1つは下のテキストフィールド、8つはすべて値 –

答えて

0

は、それを変換しないで、次のコマンドを使用します。

self.view.frame.origin.y -= kbSize.height 

変換は、それが今

0

はアウトレットとしてあなたのUIViewを設定されているように振る舞うとにこのコードを挿入する必要がありますのviewDidLoad

yourView.translatesAutoresizingMaskIntoConstraints = true 
関連する問題