세로의 높이와 가로의 높이는 포인트 단위로 측정됩니다.
세로의 높이와 가로의 높이는 포인트 단위로 측정됩니다.
답변:
iOS 7.1에서 키보드 프레임을 결정하기 위해 다음 접근 방식을 사용했습니다.
내 뷰 컨트롤러의 init 메소드에서 UIKeyboardDidShowNotification
다음을 등록했습니다 .
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];
그런 다음 다음 코드를 사용 keyboardOnScreen:
하여 키보드 프레임에 액세스했습니다. 이 코드는 userInfo
알림 에서 사전을 가져온 다음에 NSValue
연결된에 액세스합니다 UIKeyboardFrameEndUserInfoKey
. 그런 다음 CGRect에 액세스하여 뷰 컨트롤러의 뷰 좌표로 변환 할 수 있습니다. 여기에서 해당 프레임을 기반으로 필요한 계산을 수행 할 수 있습니다.
-(void)keyboardOnScreen:(NSNotification *)notification
{
NSDictionary *info = notification.userInfo;
NSValue *value = info[UIKeyboardFrameEndUserInfoKey];
CGRect rawFrame = [value CGRectValue];
CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];
NSLog(@"keyboardFrame: %@", NSStringFromCGRect(keyboardFrame));
}
빠른
그리고 Swift와 동등한 구현 :
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)
@objc
func keyboardDidShow(notification: Notification) {
guard let info = notification.userInfo else { return }
guard let frameInfo = info[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
let keyboardFrame = frameInfo.cgRectValue
print("keyboardFrame: \(keyboardFrame)")
}
iOS 8에서는 화면 키보드의 크기 가 다를 수 있습니다. 온 스크린 키보드가 항상 표시 되거나 ( 특정 높이로) 보이지 않는다고 가정하지 마십시오 .
이제 iOS 8에서는 사용자가 텍스트 예측 영역을 켜고 끌 수도 있습니다. 이렇게하면 앱 keyboardWillShow
이벤트가 다시 시작됩니다 .
이것은 많은 레거시 코드 샘플 을 깨뜨릴 것입니다 . keyboardWillShow
이벤트를 작성 하고 화면 키보드의 현재 높이를 측정하고이 (절대) 양만큼 페이지에서 컨트롤을 위아래로 이동 하도록 권장 합니다.
즉, keyboardWillShow
이벤트 를 추가 하고 키보드 높이를 측정 한 다음이 크기만큼 컨트롤의 높이를 조정 하라는 샘플 코드 가 표시되면 더 이상 작동하지 않습니다.
위의 예에서는 수직 제약 조건 constant
값 을 애니메이션하는 다음 사이트의 샘플 코드를 사용했습니다 .
내 앱 UITextView
에서 화면 하단에 설정된 내에 제약 조건을 추가했습니다 . 화면이 처음 나타날 때이 초기 수직 거리를 저장했습니다.
내 때마다 그런 다음, keyboardWillShow
이벤트를 시작했다 도착, 나는 추가 합니다 (그래서이 원래의 제약 조건 값 (신규) 키보드 높이를 제약 컨트롤의 높이의 크기를 조정합니다).
네. 못 생겼어.
그리고 저는 XCode 6의 끔찍하게 고통스러운 AutoLayout이 화면 하단이나 화면 키보드 상단에 컨트롤 하단을 연결할 수 없다는 점에 약간 짜증이 났거나 놀랐습니다.
아마도 내가 뭔가를 놓친 것 같습니다.
내 정신 말고.
키보드 높이는 세로 모드의 경우 216pt, 가로 모드의 경우 162pt입니다.
버전 참고 : iOS 9 및 10에서는 사용자 정의 키보드 크기를 지원하므로 더 이상 값이 아닙니다.
이것은 모델과 QuickType 막대에 따라 다릅니다.
키보드 높이는 모델, QuickType 막대, 사용자 설정에 따라 다릅니다. 가장 좋은 방법은 다이내믹 계산입니다.
스위프트 3.0
var heightKeyboard : CGFloat?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardShown(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
}
func keyboardShown(notification: NSNotification) {
if let infoKey = notification.userInfo?[UIKeyboardFrameEndUserInfoKey],
let rawFrame = (infoKey as AnyObject).cgRectValue {
let keyboardFrame = view.convert(rawFrame, from: nil)
self.heightKeyboard = keyboardFrame.size.height
// Now is stored in your heightKeyboard variable
}
}
최신 답변을 찾을 수 없어 시뮬레이터로 모두 확인합니다. (iOS 11.0)
장치 | 화면 높이 | 초상화 | 경치
iPhone 4s | 480.0 | 216.0 | 162.0
iPhone 5, iPhone 5s, iPhone SE | 568.0 | 216.0 | 162.0
아이폰 6, 아이폰 6s, 아이폰 7, 아이폰 8, 아이폰 X | 667.0 | 216.0 | 162.0
아이폰 6 플러스, 아이폰 7 플러스, 아이폰 8 플러스 | 736.0 | 226.0 | 162.0
iPad 5 세대, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024.0 | 265.0 | 353.0
감사!
아이폰
키보드 크기 :
2.6S, 6,7,8 : (375 × 667) : keyboardSize = (0.0, 407.0, 375.0, 260.
3.6 +, 6S +, 7+, 8+ : (414 × 736) keyboardSize = (0.0, 465.0, 414.0, 271.0)
4. XS, X : (375 X 812) 키보드 크기 = (0.0, 477.0, 375.0, 335.0)
5.XR, XSMAX ((414 x 896) keyboardSize = (0.0, 550.0, 414.0, 346.0)