2017-12-07 8 views
0

私はほとんどどこでも検索し、これに対する解決策を見つけることができません。だから、私は画面にログインし、キーボードがテキストフィールドが可読性のために上がることを示している。しかし、すぐに私はフィールドが戻って元の位置へのジャンプ入力するか、別のテキストフィールドに切り替えるよう...スウィフトUITextFieldsは、位置に戻る

ここでコード

override func viewDidLoad() { 
    super.viewDidLoad() 

    usernameField.delegate = self 

    passwordField.delegate = self 
} 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    self.view.endEditing(true) 
} 

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
    textField.resignFirstResponder() 

    return true 
} 

func textFieldDidBeginEditing(_ textField: UITextField) { 
    self.animateTextField(textField: textField, up:true) 
} 

func textFieldDidEndEditing(_ textField: UITextField) { 

    self.animateTextField(textField: textField, up:false) 
} 

func animateTextField(textField: UITextField, up: Bool) 
{ 
    let movementDuration: Double = 0.3 

    var labelMove: CGFloat = -20 
    var userMove: CGFloat = -40 
    var passMove: CGFloat = -50 

    if up 
    { 
     labelMove = -20 
     userMove = -40 
     passMove = -50 
    } 
    else 
    { 
     labelMove = 20 
     userMove = 40 
     passMove = 50 
    } 
    UIView.beginAnimations("animateTextField", context: nil) 
    UIView.setAnimationBeginsFromCurrentState(true) 
    UIView.setAnimationDuration(movementDuration) 
    self.titleLabel.frame = self.titleLabel.frame.offsetBy(dx: 0, dy: labelMove) 
    self.usernameField.frame = self.usernameField.frame.offsetBy(dx: 0, dy: userMove) 
    self.passwordField.frame = self.passwordField.frame.offsetBy(dx: 0, dy: passMove) 
    UIView.commitAnimations() 
} 

です助けてください?

+1

これを行うには、スクロールビューを使用する必要があります。インターネットではたくさんの例があります。あなたのアプローチは間違っており、すべてのデバイスタイプではなく、あるデバイスタイプではほとんど動作しません。 – GIJOW

+0

私の答えをチェックしてください:https://stackoverflow.com/questions/47698632/move-view-up-when-keyboard-is-presented/47699644#47699644 – Nirmalsinh

+0

IQKeyboardManagerを使用することができます。それはキーボードの場合で最も役立ちます。 – Nirmalsinh

答えて

0

これらは、UIScrollViewに追加する必要があります。アニメーション化しないでください。

デリゲートDidBeginEditingDidEndEditingの内部では、UIScrollViewの内部を上下にスクロールします。

とすぐに第二のアニメーションを開始すると、TextFieldの位置が定義されて元の位置にリセットするために、あなたの問題が起こっている理由は(あなたがアニメーションを定義したので、テキストフィールドのための新しい原点を設定していない)

希望します。

関連する問題