まず、レイアウトについて説明します。 2つのUITextfieldを持つUIViewがあります。いずれかのテキストフィールドを選択すると、UIViewを上に移動して、テキストフィールドがキーボードで覆われないようにします。通常の解決策は明白で、すでに実装されています:keyboardWillHide
とkeyboardWillShow
です。 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
}
}
したがって、最初のテキストフィールドをタップすると、期待どおりに動作します。しかし、最初に選択している間に2番目のタップをタップすると、さらに上に移動しますか?それとも、何かをテーピングする前に元の状態に戻りますか? –
IQKeyboardManagerを使用 –
@CharlieFish 2番目のタップで元の状態に戻りますが、上に移動しません。最初のテキストフィールドを選択 - > UIVIewは期待どおりに動きます - > 2回目にタップ(最初は選択解除しないで) - > UIVIewは元のフレームに戻ります。 – Jerland2