[iOS] keyBoardWillShow 키보드 높이 에러날 때 해결법

2880 단어 iOSiOS

많이 알려진 KeyBoard 이슈 처리

앱에서 키보드를 호출해서 사용하는 경우, 키보드가 UI 위로 올라오면서 뷰의 일부분을 가리게 된다. 그래서 보통 keyBoard 의 height를 구해서 뷰를 keyBoard height 만큼 올려줘서 이걸 해결한다.

많은 자료들이 NotificationCenter 에 keyBoardWillShow 와 keyBoardWillHide 를 등록하고 다음과 같이 키보드 이슈를 처리한다.

bottomSuperView 를 키보드 높이만큼 올리고 싶은 상황

@objc
func keyBoardWillShow(_ sender: Notification) {
  if let keyboardFrame: NSValue = sender.useInfo?
  [UIResponder.keyboardFrameEndUserInfoKey] as? NSValue
  {
    let keybaordRectangle = keyboardFrame.cgRectValue
    let keyboardHeight = keybaordRectangle.height
    
    // [주의]
    bottomSuperView.frame.origin.y -= keyBoardHeight
  }
}
     

safeArea 를 고려한 이슈 처리

그런데 노치를 가지고 있는 아이폰 버전일 경우에는 위에 썼던 방법이 정확하게 써먹히지 않는다.. safeArea 를 고려해줘야 되기 때문이다.

위 코드에서 [주의] 라고 표시했던 코드를 이렇게 바꾸면 제대로 키보드 높이를 찾아간다.

bottomSuperView.frame.origin.y -= (keyboardHeight - view.safeAreaInsets.bottom)

좋은 웹페이지 즐겨찾기