문제
- UITextField, UITextView 등 텍스트를 작성하기 위해 키보드를 올려야하는 상황에서
- 키보드가 화면을 가리는 문제가 생긴다
- 스크롤 뷰로 구성되어있다고 해도 키보드가 올라온 상황에서 스크롤이 되지 않는다
해결
- 뷰의 높이를 조정해야한다
- 키보드가 올라오면 뷰의 높이를 키보드의 높이 만큼 줄이고
- 키보드가 사라지면 뷰의 높이를 다시 돌려놔야한다
- 또한, 텍스트필드가 여러개 있을 경우 키보드가 올라올 때 초기화 해줘야한다
코드
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 func keyboardWillShow(_ sender: Notification) {
self.keyboardWillHide(sender)
let userInfo: NSDictionary = sender.userInfo! as NSDictionary
let keyboardFrame: NSValue = userInfo.value(forKey: UIResponder.keyboardFrameEndUserInfoKey) as! NSValue
let keyboardRectangle = keyboardFrame.cgRectValue
let keyboardHeight = keyboardRectangle.height
keyHeight = keyboardHeight
self.view.frame.size.height -= keyboardHeight
}
@objc func keyboardWillHide(_ sender: Notification) {
self.view.frame.size.height += keyHeight ?? 0
}