키보드가 나타나거나 사라질 때 시스템에서는 특정한 알림을 보냅니다. 이 알림을 통해 키보드의 높이와 동작을 파악할 수 있습니다.
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
keyboardWillShow와 keyboardWillHide 셀렉터를 구현하여 알림에 따른 동작을 정의합니다.
@objc func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
if self.view.frame.origin.y == 0 {
self.view.frame.origin.y -= keyboardSize.height
}
}
}
@objc func keyboardWillHide(notification: NSNotification) {
if self.view.frame.origin.y != 0 {
self.view.frame.origin.y = 0
}
}
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
view.addGestureRecognizer(tap)
@objc func dismissKeyboard() {
view.endEditing(true)
}
뷰 컨트롤러가 사라질 때 Notification Center의 옵저버를 제거해주어야 합니다.
deinit {
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}
이렇게 구현하면 키보드가 나타나거나 사라질 때 화면이 자동으로 위아래로 움직이게 됩니다. 다만, 위의 방법은 전체 뷰를 위아래로 움직이는 것이므로, 스크롤 뷰나 다른 방법을 사용하여 더 세밀한 제어가 필요한 경우에는 추가적인 구현이 필요합니다.
유용한 정보 잘 보고 갑니다!!