縦向きの高さと横向きの高さをポイントで測定します。
縦向きの高さと横向きの高さをポイントで測定します。
回答:
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)")
}
    iOS 8では、オンスクリーンキーボードのサイズが異なる場合があることを忘れないでください。オンスクリーンキーボードが常に表示される(特定の高さで)または非表示になると想定しないでください。
現在、iOS 8では、ユーザーはテキスト予測領域のオンとオフをスワイプすることもできます...これを行うと、アプリのkeyboardWillShowイベントが再び開始されます。   
これにより、多くのレガシーコードサンプルが破損します。これkeyboardWillShowは、画面キーボードの現在の高さを測定するだけのイベントを作成し、この(絶対)量だけページ上でコントロールを上下にシフトすることを推奨していました。

つまり、keyboardWillShowイベントを追加し、キーボードの高さを測定してから、コントロールの高さをこの量だけサイズ変更するように指示するサンプルコードが表示された場合、これは常に機能するとは限りません。
上記の例では、次のサイトのサンプルコードを使用しましたconstant。これは、垂直方向の制約値をアニメーション化します。
私のアプリでUITextViewは、画面の下部に設定された制約を追加しました。画面が最初に表示されたとき、この最初の垂直距離を保存しました。
次に、keyboardWillShowイベントが開始されるたびに、(新しい)キーボードの高さをこの元の制約値に追加します(制約によってコントロールの高さが変更されます)。

ええ。それは醜いです。
そして、XCode 6のひどく痛いAutoLayoutが、コントロールの下部を画面の下部またはオンスクリーンキーボードの上部に接続するだけではないことに、少しイライラ/驚きました。
おそらく私は何かが欠けています。
私の正気以外。
キーボードの高さは、ポートレートモードで216ポイント、ランドスケープモードで162ポイントです。
バージョンノート:カスタムキーボードサイズをサポートしているため、これはiOS9および10では値がなくなりました。
これは、モデルとQuickTypeバーによって異なります。

キーボードの高さは、モデル、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
           }
    }
    最新の答えが見つからないので、シミュレーターで全部チェックします(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
ありがとう!
iPhone
KeyboardSizes:
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)