[ios] iPhone의 온 스크린 키보드 높이는 얼마입니까?

세로의 높이와 가로의 높이는 포인트 단위로 측정됩니다.



답변

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값 을 애니메이션하는 다음 사이트의 샘플 코드를 사용했습니다 .

AutoLayout 연습

내 앱 UITextView에서 화면 하단에 설정된 내에 제약 조건을 추가했습니다 . 화면이 처음 나타날 때이 초기 수직 거리를 저장했습니다.

내 때마다 그런 다음, keyboardWillShow이벤트를 시작했다 도착, 나는 추가 합니다 (그래서이 원래의 제약 조건 값 (신규) 키보드 높이를 제약 컨트롤의 높이의 크기를 조정합니다).

여기에 이미지 설명 입력

네. 못 생겼어.

그리고 저는 XCode 6의 끔찍하게 고통스러운 AutoLayout이 화면 하단이나 화면 키보드 상단에 컨트롤 하단을 연결할 수 없다는 점에 약간 짜증이 났거나 놀랐습니다.

아마도 내가 뭔가를 놓친 것 같습니다.

내 정신 말고.


답변

키보드 높이는 세로 모드의 경우 216pt, 가로 모드의 경우 162pt입니다.

출처


답변

버전 참고 : iOS 9 및 10에서는 사용자 정의 키보드 크기를 지원하므로 더 이상 값이 아닙니다.

이것은 모델과 QuickType 막대에 따라 다릅니다.

여기에 이미지 설명 입력

http://www.idev101.com/code/User_Interface/sizes.html


답변

키보드 높이는 모델, 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


감사!


답변

아이폰

키보드 크기 :

  1. 5S, SE, 5, 5C (320 × 568) keyboardSize = (0.0, 352.0, 320.0, 216.0) keyboardSize = (0.0, 315.0, 320.0, 253.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)