아이폰은 입력할 때 키보드 영역이 화면 위에 뜨는 형태여서 화면의 아래 부분을 가리게 된다.
만약 웹뷰 화면에 하단 툴바가 있다면, 툴바 역시 가려지게 된다.
키보드 영역만큼 화면을 올려주기 위해서 NotificationCenter로 키보드가 나오고 사라지는 이벤트를 이용한다.
NotificationCenter Observer 생성 / 제거
/* ---------------------------------------------------
* Keyboard 노출 감지하는 NotificationCenter Observer 추가
* ---------------------------------------------------- */
func addKeyboardNotifications(){
// 키보드가 나타날 때 앱에 알리고 keyboardWillShow() 메소드를 실행하는 Observer를 추가한다.
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification , object: nil)
// 키보드가 사라질 때 앱에 알리고 keyboardWillHide() 메소드를 실행하는 Observer를 추가한다.
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
}
/* ---------------------------------------------------
* Keyboard 노출 감지하는 NotificationCenter Observer 제거
* ---------------------------------------------------- */
func removeKeyboardNotifications(){
// 키보드가 나타날 때 앱에게 알리는 Observer를 제거한다.
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification , object: nil)
// 키보드가 사라질 때 앱에게 알리는 Observer를 제거한다.
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}
Keyboard willShow / willHide 알림 수신
// 키보드가 나타나는 UIResponder.keyboardWillShowNotification 알림 수신
@objc func keyboardWillShow(_ noti: NSNotification){
// 키보드의 높이만큼 웹뷰 영역을 올려준다.
if let keyboardFrame: NSValue = noti.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardRectangle = keyboardFrame.cgRectValue
let keyboardHeight = keyboardRectangle.height
self.webViewMain.frame.origin.y -= (keyboardHeight - 50) // 툴바높이 50 제외
}
}
// 키보드가 사라지는 UIResponder.keyboardWillHideNotification 알림 수신
@objc func keyboardWillHide(_ noti: NSNotification){
// 키보드의 높이만큼 웹뷰 영역을 내려준다.
if let keyboardFrame: NSValue = noti.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardRectangle = keyboardFrame.cgRectValue
let keyboardHeight = keyboardRectangle.height
self.webViewMain.frame.origin.y += (keyboardHeight - 50) // 툴바높이 50 제외
}
}
View 에 Observer 등록
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.addKeyboardNotifications()
}
override func viewWillDisappear(_ animated: Bool){
super.viewWillDisappear(animated)
self.removeKeyboardNotifications()
}
'생계유지형 개발자 > Mobile' 카테고리의 다른 글
[ios] 매년 봐도 어려운 애플 인증서 정리요약 (0) | 2022.05.20 |
---|---|
[ios] input/textarea 한글 입력 오류 (내장 Buffer 문제) (0) | 2022.04.20 |
[ios] WkWebView에서 앱스토어 링크(itms-services://) 이동이 되지 않을 때 (0) | 2021.07.16 |
[ios] UITextField 사용할 때 키보드 타입 변경 (0) | 2021.02.09 |
[ios] iOS 13 이상 Multiple Windows 지원 업데이트 (iPad) (0) | 2020.10.21 |