본문 바로가기
iOS/iOS

keyboard 높이

by 패쓰킴 2023. 2. 1.
728x90

텍스트필드나 텍스트뷰 같은 사용자의 입력이 필요한 컴포넌트 사용시 

키보드를 이용해서 뷰의 높이 또는 위치를 조정 해주어야 할 때가 있다.

 

NSNotificationCenter에 키보드 옵저버를 등록해주고,

옵저버의 selector 함수에서 파라미터로 NSNotification을 설정해주면 userInfo를 통해 키보드의 높이 값을 얻을 수 있는데

이때 사용되는 key에 따라 값을 다르게 얻을 수 있다.

UIKeyboardFrameEndUserInfoKey    vs.   UIKeyboardFrameBeginUserInfoKey

 

둘 다 키보드의 높이를 받아오지만 처음 로드 시킬 때와 다시 로드 시킬 때 값이 다르게 나온다.

// 최초 로드
 UIKeyboardFrameEndUserInfoKey   ==> NSRect: {{0, 595}, {414, 301}}
 UIKeyboardFrameBeginUserInfoKey ==> NSRect: {{0, 896}, {414, 301}}
 
// 재로드
 UIKeyboardFrameEndUserInfoKey   ==> NSRect: {{0, 595}, {414, 301}}
 UIKeyboardFrameBeginUserInfoKey ==> NSRect: {{0, 896}, {414, 243}}

위에서 볼 수 있듯이,

UIKeyboardFrameEndUserInfoKey는 현재 디바이스 높이에서 키보드 높이를 제외한 값이 범위 설정이 되어 최초로드와 재로드의 키보드 높이 값이 동일하게 나오고

UIKeyboardFrameBeginUserInfoKey의 경우는 현대 디바이스에서 키보드가 올라 오기 전부터 값을 추적하여 최초와 재로드의 값이 다르게 리턴된다.

 

따라서, 항상 동일한 값을 얻고 싶을 때는 'UIKeyboardFrameEndUserInfoKey' 를 사용.

 

키보드 높이 가져오기 코드

// viewDidLoad
NotificationCenter.default.addObserver(self, selector: #selector(showKeyboard(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)


@objc func showKeyboard(_ noti: Notification) {
  var keyboardHeight = 0.0
        
  if let userInfo = noti.userInfo {
    if let keyboardSize = (userInfo[UIResponder.keyboardFrameBeginUserInfoKey] as? CGRect) {
      keyboardHeight = keyboardSize.height
    }
  }
  
  // do something!...
  
}
728x90

'iOS > iOS' 카테고리의 다른 글

UINavigationViewController (with. Coordinator Pattern)  (0) 2023.03.02
네이버 지도 API  (0) 2023.02.15
URL Scheme  (0) 2023.01.26
present된 ViewController에 push  (0) 2023.01.26
Expandable tableView Cell(셀 확장)  (0) 2023.01.26

댓글