キーボードの表示・非表示に合わせてUITableView
のレイアウトを調整する方法を調べたのでログとして残します。
まず、キーボードの表示・非表示のハンドリングをするためにNotification
を受信させるようにviewDidLoad
にコードを追加します。
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillHideNotification, object: nil)
notificationCenter.addObserver(self, selector: #selector(adjustForKeyboard), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
次に、プロパティに定義したtableView
のcontentInset
を変更させるメソッドを追加させます。
@objc func adjustForKeyboard(notification: Notification) {
guard let keyboardValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
let keyboardScreenEndFrame = keyboardValue.cgRectValue
let keyboardViewEndFrame = view.convert(keyboardScreenEndFrame, from: view.window)
if notification.name == UIResponder.keyboardWillHideNotification {
tableView.contentInset = .zero
} else {
tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardViewEndFrame.height - view.safeAreaInsets.bottom, right: 0)
}
tableView.scrollIndicatorInsets = tableView.contentInset
}
ここでポイントなのはtableView.scrollIndicatorInsets = tableView.contentInset
を最後に追加させてあげることです。
画面の右枠に出てくるインジケーターの位置を合わせることができます。
以上です。