ポイント単位で測定されたポートレートの高さとランドスケープの高さ。
キーボードの高さは、ポートレートモードで216pts、ランドスケープモードで162ptsです。
IOS 7.1でキーボードのフレームを決定するには、次のアプローチを使用しました。
View Controllerのinitメソッドで、UIKeyboardDidShowNotification
に登録しました:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];
次に、keyboardOnScreen:
で次のコードを使用して、キーボードのフレームにアクセスしました。このコードは、通知からuserInfo
辞書を取得し、NSValue
に関連付けられたUIKeyboardFrameEndUserInfoKey
にアクセスします。その後、CGRectにアクセスして、View Controllerのビューの座標に変換できます。そこから、そのフレームに基づいて必要な計算を実行できます。
-(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では、スクリーンキーボードのサイズcanが異なることに注意してください。オンスクリーンキーボードが常に表示される(specific heightで)または非表示になると想定しないでください。
現在、iOS 8では、ユーザーはテキスト予測領域のオン/オフを切り替えることもできます...これを行うと、アプリのkeyboardWillShow
イベントagainが開始されます。
このwillは、多くのレガシーコードサンプルを破壊します。これは、スクリーンキーボードの現在の高さを測定するだけのkeyboardWillShow
イベントを記述し、この(絶対的な)量。
つまり、keyboardWillShow
イベントを追加してキーボードの高さを測定し、この量だけコントロールの高さを変更するよう指示するサンプルコードが表示された場合、これは常に機能しなくなります。
上記の例では、次のサイトのサンプルコードを使用しました。これは、垂直制約constant
値をアニメーション化します。
私のアプリでは、画面の下部に設定されたUITextView
に制約を追加しました。画面が最初に表示されたとき、この最初の垂直距離を保存しました。
その後、私のkeyboardWillShow
イベントが開始されるたびに、この新しい制約値に(新しい)キーボードの高さをaddします(つまりconstraintはコントロールの高さ)。
うん。それは醜いです。
そして、XCode 6のひどく痛みを伴うAutoLayoutでは、コントロールの下部を画面の下部または画面上のキーボードの上部に取り付けることができないだけで、少しイライラ/驚いています。
おそらく私は何かが欠けています。
私の正気以外。
バージョンノート:これは、カスタムキーボードサイズをサポートするため、iOS 9および10ではもはや値ではありません。
これは、モデルとQuickTypeバーに依存します。
キーボードの高さは、モデル、QuickTypeバー、ユーザー設定に依存します...最良のアプローチは、動的に計算することです:
Swift 3.
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プラス、iPhone 7プラス、iPhone 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
ありがとう!
iPhone
キーボードサイズ:
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)