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


84

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


2
여기에서 iPhone의 모든 치수를 찾을 수 있습니다. iPhone 치수
— Pfitz

3
마지막 "iPhone 크기"링크를 사용하지 마십시오! iOS 8이 나오기 전인 2011 년이었고, 온 스크린 키보드 높이를 다양하게 허용했습니다.
— Mike Gledhill 2015 년

@MikeGledhill 화면 키보드의 높이가 다를 경우에도 이전에 아이폰 OS 8
— 재 감지

관련 : 키보드 높이의 실제 값 (예 : 디버그 목적)을 찾고 있다면 iOS 외국어 키보드 높이를
— Senseful 2015-08-27

답변:


211

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)")
}

4
약간 관련된 것처럼 보이지만 키보드 크기를 하드 코딩하는 것보다 확실히 낫습니다. 정답입니다.
— n13 2014

2
이 답변에 투표하고 질문에 반대 투표했습니다. OP는 그가 무슨 말을하는지 확실히 모릅니다. 조심해! 이 대답은 정답입니다!
— superarts.org

2
Landscape에 대한 하나의 보완 : if (SYSTEM_VERSION_LESS_THAN (@ "8.0")) {_keyboardHeight = keyboardFrame.size.width; } else {_keyboardHeight = keyboardFrame.size.height; }
— LiangWang

3
키보드를 표시하지 않고이를 수행 할 수있는 방법이 있습니까? 제 경우에는 키보드 뒤에 같은 높이의 무언가를 갖고 싶습니다 (메신저가 물건을 가지고있는 것과 비슷 함)
— John

@ superarts.org 질문에 투표 할 필요가 없습니다. 사람들은 대부분이 검색되며, 모든 :) 좋은, 그래서 그들은 지금 ..이 답변을 볼 수
— 잭

46

iOS 8에서는 화면 키보드의 크기 가 다를 수 있습니다. 온 스크린 키보드가 항상 표시 되거나 ( 특정 높이로) 보이지 않는다고 가정하지 마십시오 .

이제 iOS 8에서는 사용자가 텍스트 예측 영역을 켜고 끌 수도 있습니다. 이렇게하면 앱 keyboardWillShow이벤트가 다시 시작됩니다 .

이것은 많은 레거시 코드 샘플 을 깨뜨릴 것입니다 . keyboardWillShow이벤트를 작성 하고 화면 키보드의 현재 높이를 측정하고이 (절대) 양만큼 페이지에서 컨트롤을 위아래로 이동 하도록 권장 합니다.

여기에 이미지 설명 입력

즉, keyboardWillShow이벤트 를 추가 하고 키보드 높이를 측정 한 다음이 크기만큼 컨트롤의 높이를 조정 하라는 샘플 코드 가 표시되면 더 이상 작동하지 않습니다.

위의 예에서는 수직 제약 조건 constant값 을 애니메이션하는 다음 사이트의 샘플 코드를 사용했습니다 .

AutoLayout 연습

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

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

여기에 이미지 설명 입력

네. 못 생겼어.

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

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

내 정신 말고.


실제로 키보드 크기는 이전 iOS 버전에서도 항상 다릅니다. 예를 들어 체크 필기 중국어
— 재 감지

죄송합니다. 인식하지 못했습니다. 너무 많은 "keyboardWillShow"샘플이 항상이 이벤트가 키보드가 나타나거나 사라 졌을 때 한 번만 호출된다고 가정하는 것이 이상하다는 것을 알았습니다 . 키보드가 화면에 머무르는 데 대처할 수있는 기능이 없지만 크기가 변경되는 경우.
— Mike Gledhill

1
나는 당신이 때문에 회전 또는 표시 (/ 숨기기) 텍스트 예측 바 ...에 프레임의 변경 "UIKeyboardWillChangeFrameNotification"를 사용하여야한다 생각 @MikeGledhill
— Abdalrahman 임칙서

방금 내 앱으로 이것을 테스트했습니다. UIKeyboardWillChangeFrameNotification 은 키보드를 표시하거나 텍스트 예측 영역을 켜거나 끌 때마다 keyboardWillShow 이벤트와 마찬가지로 항상 호출됩니다. 그래서별로 도움이되지 않습니다. 내 요점은 ... 사용자는 이러한 이벤트에 대해 약간주의해야합니다. 그게 다입니다.
— Mike Gledhill 2015 년

1
왜 이것이 더 많은 관심을 가지지 않습니까?
— rfoo

30

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

출처


135
스스로 대답하는 질문을 게시하려면 최소한 적절한 대답을하세요. 키보드의 크기는 일부 웹 사이트에서 가져온 하드 코딩 된 값이 아니라 알림 개체에서 가져와야합니다. 여기를
— jrturton

16
@jrturton 문제는 프로그래밍 방식으로 높이를 찾는 방법이 아닙니다. 이 질문은 프로그래머뿐만 아니라 그래픽 디자이너에게도 유용합니다. 당신이 요구하는 대답은 다른 질문에 속합니다. 사실, 그 대답에 대한 또 다른 질문이 있습니다 : stackoverflow.com/a/7302291/310121
— Erik B

48
@ErikB 조심하세요. 키보드 크기는 언어 및 키보드 유형에 따라 다릅니다.
— 가브리엘

13
자신을 위해 절대로 하드 코딩 된 값을 사용하지 마십시오! 강력한 예로, 사용자는 높이에 크게 신경 쓰지 않는 분할 (2 부분) 키보드를 사용할 수 있습니다.
— Timo

6
이 대답은 게으르고 위험합니다. 실제 값은 iOS 주요 릴리스 버전간에 변경되는 경향이 있으므로 UIKeyboardDidShowNotification에서 키보드 높이를 가져 오십시오. 아래 Ken의 대답을 참조하십시오.
— Alexander


10

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

8

최신 답변을 찾을 수 없어 시뮬레이터로 모두 확인합니다. (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


감사!


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)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.