Avatar
Kishikawa Katsumi 5/4/2018 9:00 AM
iOS 11からFrameの大きさが変更前と後で同じならinputViewが変わってもUIKeyboard関連のNotificationが呼ばれなくなるという変更があったみたいなんだけど、iPhone Xでは明らかに見た目の高さが変わってるのに通知されないからどうしようもないという問題があるみたいです。 再現プロジェクト https://github.com/kishikawakatsumi/UIKeyboardNotificationNotCalled ^ iPhone XでUSキーボードからToggleボタンを押すと、明らかにキーボードの高さが変わるので通知して欲しいけど通知されない。カスタムInputViewの高さを275以外にすると通知される。 iPhone X以外、例えばiPhone 7では高さが258(USキーボードから切り開ける場合。日本語のフリック入力キーボードの場合は216)のとき、同様に通知されないけどこれは見た目の高さは変わらないので実質的に問題にならない。
Contribute to UIKeyboardNotificationNotCalled development by creating an account on GitHub.
😳 4
9:00 AM
http://www.openradar.me/33990607 <= たぶん同じ問題。
9:04 AM
Workaroundとしては @IBAction func toggleInputView(_ sender: Any) { let wasFirstResponder = textField.isFirstResponder if wasFirstResponder { textField.resignFirstResponder() } if let _ = textField.inputView { textField.inputView = nil } else { let myInputView = UIView(frame: view.bounds) myInputView.frame.size.height = 275 myInputView.backgroundColor = .blue textField.inputView = myInputView } textField.reloadInputViews() if wasFirstResponder { textField.becomeFirstResponder() } } こんな感じで、resignFirstResponder()を挟む。それだけだとキーボードが閉じてしまうのでbecomeFirstResponder()も呼ぶ。同じメソッド内で呼ぶぶんにはRunLoopが回らないので最終的に何ごともなかったようにキーボードはそのまま(変換中の日本語入力などは確定されてしまう)。