ここでは、縦の高さと横の高さの2つの数値を探しています。 cmやインチではなく、ピクセルで答えてください。
ポートレートの高さは264で、ランドスケープの高さは352です。
私はこれが遅い答えであることを知っていますが、私はこの質問に自分で出会いました。
- (void) keyboardWasShown:(NSNotification *)nsNotification {
NSDictionary *userInfo = [nsNotification userInfo];
CGSize kbSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
NSLog(@"Height: %f Width: %f", kbSize.height, kbSize.width);
// Portrait: Height: 264.000000 Width: 768.000000
// Landscape: Height: 352.000000 Width: 1024.000000
}
答えは依存です。
キーボードの高さは16種類あり、任意の位置に配置できます。
以下の点で異なります:
いくつかの異なる可能な構成を示す画像を添付しました。
16個すべての可能性を列挙するのではなく、UIKeyboardWillShowNotification
/UIKeyboardWillHideNotification
およびUIKeyboardDidChangeFrameNotification
(iOS 5.0以降)を観察し、それらのイベントからキーボードのフレームを取得したいと思います。
IPadでは、キーボードのサイズは言語にも依存します(たとえば、日本語キーボードのほうが背が高い)。プログラムで照会するもう1つの理由。
キーボードの高さは、UIWindowクラス( リファレンスガイドリンク で提供されるように、キーボード通知の表示/非表示のwill/didによって返されるuserInfo辞書から取得できます。 =)。次の利点があるため、これはハードコーディングよりもはるかに優れた高さを取得する方法です。
実際、正確な数を与えるこの質問に対する答えは、この辞書内で返された結果を見ることでこの数を得た可能性が高いです!
私はこのページのいくつかの答えを危険なほど誤解させているのでdownに投票しました。
確かに、iOS 8では、ハードコーディングされたキーボードの高さをcannot使用できません。
理由を説明するために、iPhoneで実行する私のアプリを次に示します。
ルーラーをつかんで、スクリーンキーボードの高さを教えてください。
ああ...あなたはそれをすることはできません、できますか?
ユーザーがオンスクリーンキーボードの上部にある自動入力バーをオンにすると、高さが変わる可能性があります(ちなみに、2番目の "keyboardWillShow
"イベントがトリガーされます)。
IPadのオンスクリーンキーボードについても同じことが言えます。
一番下の行:ごめんなさい、あなたはmustkeyboardWillShow
イベントでキーボードの高さを測定する必要があります。
そうしないと、問題が発生します。
- (void)keyboardWillShow:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
NSValue *kbFrame = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardFrame = [kbFrame CGRectValue];
keyboardFrame = [self.view convertRect:keyboardFrame fromView:nil];
CGFloat heightOfKeyboard = keyboardFrame.size.height;
NSLog(@"The keyboard is now %d pixels high.", (int)heightOfKeyboard);
}
ところで、上記のコードのconvertRect
の呼び出しを忘れないでください。
それがなければ、iOS 8を搭載した横長のiPadで、キーボードの高さが1024ピクセルであると報告されることがありました。
もう1つ...
今日、私は書いたカスタムコントロールに取り組んでいた。これはiPhone/iPadの画面の下部に表示され、画面上のキーボードの高さを考慮していないことに気付いた。
この小さなコントロールは汎用であり、どの画面からでも呼び出すことができるため、keyboardWillShow/Hide通知を追加したくありませんでした。
オンスクリーンキーボードの高さを見つけるための私のソリューションは、現在表示されている場合、無料のSVProgressHUD
コントロールから優れたvisibleKeyboardHeight関数を使用することでした。
そのコントロールalsoもオンスクリーンキーボードの高さを必要としたため、通知メッセージUIView
sは垂直方向の中央に表示されます。
それは御worked走を働いた...だから、もしあなたがdoキーボードの高さをつかむための手っ取り早い方法が必要なら、このコードのコピーをつかんで、SVProgressHUD.mファイル。
IOS 7では、iPadの場合、Landscapeでは402、Portraitでは314です。
高さ:PORTRAIT = 264 LANDSCAPE = 352
私はそれが何であるかわかりませんが、あなたはそれを十分に簡単に理解することができます。
IPadでこのページを閲覧する...
var totalHeight = window.innerHeight;
document.getElementById('what-is-my-height').onclick = function() {
alert(totalHeight - window.innerHeight);
};
<button id="what-is-my-height">Bring up keyboard, then Push me</button>
(画面キーボードを表示した後)ボタンをクリックすると、高さが表示されます。他の方向についても繰り返します。
IOS 7では、横モードで高さと幅が入れ替わらないという問題がありましたが、この問題はiOS 8で修正されました。
そのため、iOS7またはiOS8の高さを常に返すコードの一部を以下に示します。これにより、コードのバージョン固有のチェックが不要になります。
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
//Always gives the height as the height is of smaller dimension
CGFloat height = (kbSize.height>kbSize.width)?kbSize.width:kbSize.height;
}
他の回答で解決されるよりも多くの問題があると思います。たとえば、このキーボードで終わることができます:
これは、iOS 9のiPadキーボードで「非表示」ボタンをクリックすると発生します。このキーボードは、Mike Gledhill
answerからの通知情報にfull
サイズのままです。 (UIKeyboardFrameEndUserInfoKey
キーボードの高さは300を超えています)。
正しい値を得るために、デバイスの高さからキーボードのy軸の原点を引く必要がありました。
- (void)keyboardWillShow:(NSNotification *)notification
NSDictionary *info = [aNotification userInfo];
CGRect keyboardFrame = [info[UIKeyboardFrameBeginUserInfoKey] CGRectValue];
keyboardFrame = [info[UIKeyboardFrameEndUserInfoKey] CGRectValue];
keyboardFrame = [self.view convertRect:keyboardFrame fromView:nil];
CGFloat yPosition = keyboardFrame.Origin.y;
NSInteger height = [UIScreen mainScreen].bounds.size.height - yPosition;
}
両方の向きのiPhoneとiPadを搭載したiOS9で動作します。