- Xcode8.0 + Swift3.0
よくあるキーボードの高さ取得方法(不完全)
不完全な例
@objc private func keyboardDidShow(_ sender: NSNotification) {
if let dic: Dictionary = sender.userInfo {
if let value = dic[UIKeyboardFrameEndUserInfoKey] as? NSValue {
print("height=\(value.cgRectValue.height)")
}
}
}
iOS8辺りまではこんな感じでCGRect
のheight
値をそのまま信じてもオッケーでしたが、iOS9からは外部キーボードを使ったときに、ショートカットバー(?)が出るようになったせいか、上記のものだと誤った高さになってしまいます。
キーボードの矩形とheight値
rect=(0.0, 713.0, 1024.0, 398.0)
height=398.0
どう見ても高さ398ポイントには見えません。
たぶん通常サイズのキーボードが画面外にはみ出しているんでしょうね。
なお外部キーボードはシミュレーターの場合、Shift+⌘+K
で切り替えられます。
解決策
画面の高さからCGRect.minYを引いた値を使うのが良さそうです。
修正例
height = UIScreen.main.bounds.height - value.cgRectValue.minY
終わりに
ダメな場合があったら教えてください。
最近はiPad ProのSmart Keyboardの登場により、この辺のテストも必須になりますね。。。