概要
SwiftUI でキーボードを表示したときに、背景のコンテンツの高さがよろしく調整されず、キーボードの背後に隠れてしまうので、自分で実装した。
Before
After
サンプルコード
方法
Spacer の高さをキーボードの高さにして、コンテンツを見える範囲にする戦略。
- キーボードの状態はノーティフィケーションで取得できるが、
structだとノーティフィケーションを受け取れないので、ViewModel クラスを実装して通知を受け取る。 - Combine を使って ViewModel のキーボードの高さを監視し、
Spacerに渡す。 - キーボードの高さの変化に応じて
Spacerの高さが動的に変化し、スクロールの範囲を調整することができる。
補足
- iPad ではキーボードの表示位置が決まってないので、無効にした方が良い。
- キーボードの高さをそのまま
Spacerに渡すと、キーボードの上に 34px ぐらいの余白ができてしまうので、調整が必要。 - キーボード上げ下げに応じたアニメーションは諦めた。

