Анимационное текстовое поле, расширяющееся как Messenger и Whatsapp - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь развернуть текстовое поле моего сообщения, когда пользователь начинает печатать, анимируя ограничение макета Right.Текстовое поле расширяется, однако оно расширяется в обе стороны от центра, что не является желаемым эффектом, поскольку я обновляю только одно ограничение, почему меняется другое?

func animateTextField(textfield : UITextField, constraint : NSLayoutConstraint) {
    let isTextFieldExpanded = constraint.constant == 15
    constraint.constant = isTextFieldExpanded ? 59 : 15
    UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseInOut, animations: {
        textfield.layoutIfNeeded()
        textfield.translatesAutoresizingMaskIntoConstraints = false
    })
}

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

func handleTypingAnimation(view : UIView, textField : UITextField, constraint : NSLayoutConstraint) {

    if textField.text?.isEmpty == false {
        animateSendButtonAppear(view: view)
        animateTextField(view: view, textfield: textField, constraint: constraint)
    }else{
        animateSendButtonHide(view: view)
    }
}

My View Controller

@IBAction func didStartTyping(_ sender: UITextField) {
    messageVM.handleTypingAnimation(view: sendButtonView, textField: messageTextField, constraint: textfieldRightConstraint)
}

Мое ограничение макета

@IBOutlet var textfieldRightConstraint: NSLayoutConstraint!

1 Ответ

0 голосов
/ 23 сентября 2018

Вы можете попробовать

UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseInOut, animations: {
    self.view.layoutIfNeeded()
  //  textfield.translatesAutoresizingMaskIntoConstraints = false
}

. Вы всегда должны изменять макет родителя, когда вносите изменения в ограничения ребенка

...