iOS에 맞춤형 키보드가 도입되면서이 문제는 좀 더 복잡해졌습니다.
간단히 말해 UIKeyboardWillShowNotification 은 사용자 정의 키보드 구현에 의해 여러 번 호출 될 수 있습니다.
- Apple 시스템 키보드가 열려 있을 때 (세로)
- UIKeyboardWillShowNotification은 키보드 높이 224로 전송됩니다.
- 때 있는 Swype 키보드 (세로) 열 :
- UIKeyboardWillShowNotification이 키보드 높이 0으로 전송됩니다.
- UIKeyboardWillShowNotification은 216 의 키보드 높이로 전송됩니다.
- UIKeyboardWillShowNotification은 256 의 키보드 높이로 전송됩니다.
- SwiftKey 키보드 가 열릴 때 (세로) :
- UIKeyboardWillShowNotification이 키보드 높이 0으로 전송됩니다.
- UIKeyboardWillShowNotification은 216 의 키보드 높이로 전송됩니다.
- UIKeyboardWillShowNotification은 키보드 높이 259로 전송됩니다.
이러한 시나리오를 하나의 코드 라인에서 적절하게 처리하려면 다음을 수행해야합니다.
UIKeyboardWillShowNotification 및 UIKeyboardWillHideNotification 알림 에 대해 관찰자를 등록합니다 .
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
현재 키보드 높이를 추적하는 전역 변수를 만듭니다.
CGFloat _currentKeyboardHeight = 0.0f;
키보드 높이의 현재 변경에 반응하도록 keyboardWillShow 를 구현합니다 .
- (void)keyboardWillShow:(NSNotification*)notification {
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
CGFloat deltaHeight = kbSize.height - _currentKeyboardHeight;
_currentKeyboardHeight = kbSize.height;
}
참고 : 뷰 오프셋에 애니메이션을 적용 할 수 있습니다. 정보 사전에서 키가 값이 포함되어 UIKeyboardAnimationDurationUserInfoKey을 . 이 값은 표시되는 키보드와 동일한 속도로 변경 사항을 애니메이션하는 데 사용할 수 있습니다.
reset _currentKeyboardHeight에 keyboardWillHide 를 구현 하고 해제되는 키보드에 반응합니다.
- (void)keyboardWillHide:(NSNotification*)notification {
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
_currentKeyboardHeight = 0.0f;
}
keyboardFrameBeginRect
로컬 좌표 로 변환하면 도움이 될 수 있습니다 .