Клавиатурная анимация работает только в первый раз - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю над приложением iOS с Swift 4. В этом проекте я создал динамические TextFields.И я добавил UIScrollView, когда мы щелкаем на TextField, вид прокрутки должен двигаться вверх, пока появляется клавиатура, и вид прокрутки должен двигаться вниз, когда исчезает клавиатура.Приведенный ниже код работает нормально только при первом клике.Со второго раза он не работает.Когда я редактирую, клавиатура TextField появляется, но прокрутка не движется вверх.

@IBOutlet weak var contentView: UIView!
@IBOutlet weak var constraintContentHeight: NSLayoutConstraint!

var activeField: UITextField?
var lastOffset: CGPoint!
var keyboardHeight: CGFloat!

В ViewDidLoad ()

 NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)

            // Add touch gesture for contentView
            self.contentView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(returnTextView(gesture:))))



@objc func keyboardWillShow(notification: NSNotification) {
        if keyboardHeight != nil {
            return
        }

        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
            keyboardHeight = keyboardSize.height

            // so increase contentView's height by keyboard height
            UIView.animate(withDuration: 0.3, animations: {
                self.constraintContentHeight.constant += self.keyboardHeight
            })

            // move if keyboard hide input field
            let distanceToBottom = self.myScroll.frame.size.height - (activeField?.frame.origin.y)! - (activeField?.frame.size.height)!
            let collapseSpace = keyboardHeight - distanceToBottom

            if collapseSpace < 0 {
                // no collapse
                return
            }

            // set new offset for scroll view
            UIView.animate(withDuration: 0.3, animations: {
                // scroll to the position above keyboard 10 points
                self.myScroll.contentOffset = CGPoint(x: self.lastOffset.x, y: collapseSpace + 10)
            })
        }
    }


    @objc func keyboardWillHide(notification: NSNotification) {
        UIView.animate(withDuration: 0.3) {
            self.constraintContentHeight.constant -= self.keyboardHeight

            self.myScroll.contentOffset = self.lastOffset
        }

        keyboardHeight = nil
    }





 @objc func returnTextView(gesture: UIGestureRecognizer) {
        guard activeField != nil else {
            return
        }

        activeField?.resignFirstResponder()
        activeField = nil
    }



    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        activeField = textField
        lastOffset = self.myScroll.contentOffset
        return true
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        activeField?.resignFirstResponder()
        activeField = nil
        return true
    }

Может кто-нибудь, пожалуйста, помогите мне решить эту проблему.Какую ошибку я совершил здесь.

Заранее спасибо.

...