1

I'm trying to update the constraints of my view when the keyboard appears and disappears

I have notifications for keyboardWillShow and keyboardWillHide and corresponding functions to call them:

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name:UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)

@objc private func keyboardWillShow(notification: NSNotification) {
    if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
        let keyboardFrameEnd = keyboardFrame.cgRectValue
        let convertedKeyboardFrameEnd = self.view.convert(keyboardFrameEnd, from: nil)
        let intersection = convertedKeyboardFrameEnd.intersection(listView.frame)
        if intersection.size.height > 0 {
            self.listView.snp.makeConstraints { make in
                make.top.leading.trailing.equalTo(0)
                make.bottom.equalTo(-intersection.height)
            }
            self.view.setNeedsLayout()
            self.view.layoutIfNeeded()
        }
    }
}

@objc private func keyboardWillHide() {
    self.listView.snp.makeConstraints { make in
        make.edges.equalTo(0)
        make.bottom.equalTo(0)
    }
    self.listView.setNeedsUpdateConstraints()
    self.listView.updateConstraints()
    self.view.setNeedsLayout()
    self.view.layoutIfNeeded()
}

It seems that keyboardWillShow gets called and updates the size of my listView to be the visible size outside of the keyboard. However, keyboardWillHide gets called and it doesn't seem to update the bottom back to have value 0 so I end up with a case where my view is not resized back to its original size. Any ideas what might be wrong here?

user3492121
  • 535
  • 1
  • 4
  • 12
  • 5
    You are adding each time new constraints... you are using `makeConstraints()`, not `updateConstraints()`. Don't you have conflicts error messages in console? – Larme Aug 31 '21 at 16:59
  • Ah nice. Yeah it seems I have to use `remakeConstraints` instead and it's adjusting the size now – user3492121 Aug 31 '21 at 17:23

0 Answers0