Keyboard Notification User Info Keys
Text Programming Guide for iOS
コンテンツを投稿する画面などで Keyboard の表示非表示によってレイアウトを変更する必要がある場面があります。
この際に、UIKeyboardNotification に登録することで、登録したオブジェクトで keyboard 通知を受け取ることが出来るようになります。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
}
func keyboardWillShow(_ notification: NSNotification) {
print(notification.userInfo)
}
console
[
AnyHashable("UIKeyboardCenterBeginUserInfoKey"): NSPoint: {187.5, 796},
AnyHashable("UIKeyboardIsLocalUserInfoKey"): 1,
AnyHashable("UIKeyboardCenterEndUserInfoKey"): NSPoint: {187.5, 538},
AnyHashable("UIKeyboardBoundsUserInfoKey"): NSRect: {{0, 0}, {375, 258}},
AnyHashable("UIKeyboardFrameEndUserInfoKey"): NSRect: {{0, 409}, {375, 258}},
AnyHashable("UIKeyboardAnimationCurveUserInfoKey"): 7,
AnyHashable("UIKeyboardFrameBeginUserInfoKey"): NSRect: {{0, 667}, {375, 258}},
AnyHashable("UIKeyboardAnimationDurationUserInfoKey"): 0.25
]
Dictionaryの値の中にNSPoint
やNSRect
が入っているので、NSValueにキャストしてからCGRect
やCGPoint
を取得します。
下の図の仕様を満たすアプリケーションを作成してください。
ポイント
- keyboardWillHide という通知名でキーボード非表示通知登録
- Viewのframeを変更するだけではなく、constraintを変更することでもアニメーションが可能です
- Interface Builderから任意のconstraintをIBOutletとして紐付ける
- 任意のconstraintのconstantに変更したい値を代入する
- Viewのsuperviewの
layoutIfNeeded()
をアニメーションのclosure内で実行する