2017-05-13 15 views
1

まず、レイアウトについて説明します。 2つのUITextfieldを持つUIViewがあります。いずれかのテキストフィールドを選択すると、UIViewを上に移動して、テキストフィールドがキーボードで覆われないようにします。通常の解決策は明白で、すでに実装されています:keyboardWillHidekeyboardWillShowです。 1つのテキストフィールドを選択すると、UIViewが期待どおりに動作しますが、1つのテキストフィールドが選択され、次のテキストフィールドが選択されると、UIVIEWは元の制約にスナップバックし、keyboardWillShowが再度呼び出されても再調整しません。iOS Swift - 複数のUITextFields UIViewを移動する

希望する効果を得るには:テキストフィールドが選択されるとUIViewが上に移動し、次のテキストフィールドが選択されるとUIViewはまったく同じ位置に残ります。

2番目のテキストフィールドでUIViewが現在選択されているのはなぜですか?

以下は関連するコードです。これらの機能はVDLに設定されています。他のコードはテキストフィールドに触れることはありません。これらのテキストフィールドが現在のコンテキストよりもモーダルビューで発生することに言及する価値があります。受け入れ答えに代わりの我々はUIViewsの場所を口述レイアウト制約を更新することを選択したのUIViewの位置を調整するに述べたように:また、キーボードを言及する価値タイプdecimalPad

​​

EDITのANSWERです。あなたはそれが自動的に元の位置に戻ってリセットされるビュー上の制約で自動レイアウトを使用しているのでkeyboardWillShow

func keyboardWillShow(notification:NSNotification) { 
    if isKeyboardOffset == false { 
     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
      print("Keyboard show... \(keyboardSize)") 
      self.topConstraint.constant -= 100 

     } 
     isKeyboardOffset = true 
    } 
} 
+0

したがって、最初のテキストフィールドをタップすると、期待どおりに動作します。しかし、最初に選択している間に2番目のタップをタップすると、さらに上に移動しますか?それとも、何かをテーピングする前に元の状態に戻りますか? –

+0

IQKeyboardManagerを使用 –

+0

@CharlieFish 2番目のタップで元の状態に戻りますが、上に移動しません。最初のテキストフィールドを選択 - > UIVIewは期待どおりに動きます - > 2回目にタップ(最初は選択解除しないで) - > UIVIewは元のフレームに戻ります。 – Jerland2

答えて

1

の次の実装。したがって、制約の値を変更した場合は、ビューの位置を変更する代わりに、これが機能するはずです。

関連する問題