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.