Keyboard表示時のUITableViewのレイアウト調整について

March 23, 2021

キーボードの表示・非表示に合わせて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)

次に、プロパティに定義したtableViewcontentInsetを変更させるメソッドを追加させます。

 @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

を最後に追加させてあげることです。

画面の右枠に出てくるインジケーターの位置を合わせることができます。

以上です。