iPhoneのオンスクリーンキーボードの高さはどれくらいですか?


84

縦向きの高さと横向きの高さをポイントで測定します。


2
ここでは、iPhoneのすべての寸法を見つけることができます:iPhoneの寸法
Pfitz 2012

3
最後の「iPhoneの寸法」リンクは使用しないでください。iOS 8が登場する前の2011年からであり、画面上のキーボードの高さを変えることができました。
Mike Gledhill 2015年

@MikeGledhillオンスクリーンキーボードの高さが変化しても前のiOS 8
再検出

関連:キーボードの高さの実際の値を探している場合(デバッグ目的など)、iOSの外国語のキーボードの高さを
意味のある2015

回答:


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にアクセスして、ViewControllerのビューの座標に変換できます。そこから、そのフレームに基づいて必要な計算を実行できます。

-(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 2014年

2
ランドスケープの1の補数:if(SYSTEM_VERSION_LESS_THAN(@ "8.0")){_ keyboardHeight = KeyboardFrame.size.width; } else {_keyboardHeight = KeyboardFrame.size.height; }
LiangWang 2014

3
キーボードを表示せずにこれを行う方法はありますか?私の場合、キーボードの後ろに同じ高さの何かが欲しいです(メッセンジャーが物を持っているのと同じように)
John

@ superarts.org質問に投票する必要はありません。人々が最も可能性が高い。このために検索されます、そして、彼らは今、この答えが表示されます。..ので、すべての良い:)です
ジャック

46

iOS 8では、オンスクリーンキーボードのサイズ異なる場合があることを忘れないでください。オンスクリーンキーボードが常に表示される(特定の高さで)または非表示になると想定しないでください。

現在、iOS 8では、ユーザーはテキスト予測領域のオンとオフをスワイプすることもできます...これを行うと、アプリのkeyboardWillShowイベントが再び開始されます。

これにより、多くのレガシーコードサンプル破損します。これkeyboardWillShowは、画面キーボードの現在の高さを測定するだけのイベントを作成し、この(絶対)量だけページ上でコントロールを上下にシフトすることを推奨していました。

ここに画像の説明を入力してください

つまり、keyboardWillShowイベントを追加し、キーボードの高さを測定してから、コントロールの高さをこの量だけサイズ変更するように指示するサンプルコードが表示された場合、これは常に機能するとは限りません。

上記の例では、次のサイトのサンプルコードを使用しましたconstant。これは、垂直方向の制約値をアニメーション化します。

AutoLayoutの練習

私のアプリでUITextViewは、画面の下部に設定された制約を追加しました。画面が最初に表示されたとき、この最初の垂直距離を保存しました。

次に、keyboardWillShowイベントが開始されるたび、(新しい)キーボードの高さをこの元の制約値に追加します(制約によってコントロールの高さが変更されます)。

ここに画像の説明を入力してください

ええ。それは醜いです。

そして、XCode 6のひどく痛いAutoLayoutが、コントロールの下部を画面の下部またはオンスクリーンキーボードの上部に接続するだけではないことに、少しイライラ/驚きました。

おそらく私は何かが欠けています。

私の正気以外。


実際、古いiOSバージョンでも、キーボードのサイズは常に異なります。例:手書きの中国語をチェック
ReDetection 2015年

おっと、気づかなかった。非常に多くの「keyboardWillShow」サンプルが、キーボードが表示または非表示になったときにこのイベントが1回だけ呼び出されると常に想定しているのは奇妙だと思いました。キーボードが画面に表示されたままであることに対処する機能はありませんが、サイズが変更されています。
Mike Gledhill 2015年

1
@MikeGledhill回転またはテキスト予測バーの表示(/非表示)によるフレームの変更には、「UIKeyboardWillChangeFrameNotification」を使用する必要があると思います...
Abdalrahman Shatou 2015年

私は自分のアプリでこれをテストしました。UIKeyboardWillChangeFrameNotification、キーボードを表示するか、テキスト予測領域をオンまたはオフにするたびに、常にASWELL ASthekeyboardWillShowイベントと呼ばれます。ですから、それはあまり役に立ちません。私のポイントは...ユーザーはこれらのイベントに少し注意する必要があります、それだけです。
Mike Gledhill 2015年

1
なぜこれはもっと注目されないのですか?
rfoo 2015

30

キーボードの高さは、ポートレートモードで216ポイント、ランドスケープモードで162ポイントです。

ソース


135
自己回答の質問を投稿する場合は、少なくとも適切な回答を提供してください。キーボードのサイズは、一部のWebサイトから取得したハードコードされた値ではなく、通知オブジェクトから取得する必要があります。ここを
jrturton 2012

16
@jrturton問題は、プログラムで高さを見つける方法ではありません。この質問は、プログラマーだけでなく、グラフィックデザイナーなどにも役立ちます。あなたが求めている答えは別の質問に属しています。実際、その答えには別の質問があります:stackoverflow.com/a/7302291/310121
Erik B

48
@ErikB注意してください。キーボードのサイズは、キーボードの言語と種類によって異なります。
ガブリエル

13
あなた自身のために、ハードコードされた値を決して使用しないでください!強力な例として、ユーザーは高さをあまり気にしない分割(2部構成)キーボードを使用している可能性があります。
ティモ

6
この答えは怠惰で危険です。実際の値はiOSのメジャーリリースバージョン間で変わる傾向があるため、UIKeyboardDidShowNotificationからキーボードの高さを取得してください。以下のケンの答えを参照してください。
アレクサンダー

16

バージョンノート:カスタムキーボードサイズをサポートしているため、これはiOS9および10では値がなくなりました。

これは、モデルとQuickTypeバーによって異なります。

ここに画像の説明を入力してください

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


1
バージョンノート:カスタムキーボードサイズをサポートしているため、これはiOS9および10では値がなくなりました。
ラプター2017

10

キーボードの高さは、モデル、QuickTypeバー、ユーザー設定によって異なります...最良のアプローチは、動的に計算することです。

Swift 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

iPhone 6、iPhone 6s、iPhone 7、iPhone 8、iPhone X | 667.0 | 216.0 | 162.0

iPhone 6 plus、iPhone 7 plus、iPhone 8 plus | 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

iPhone

KeyboardSizes:

  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)keyboardSize =(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.