【React Native】iOSでダイアログ下部のボタンがキーボードに隠れる

こちらの対応にかなり手こずったので、備忘録としてまとめ。
React Native で、「react-native-dialog」ライブラリを使って、入力欄のあるダイアログを表示した際、キーボードの後ろに、OK やキャンセルボタンが隠れてしまう時の対処法です。
特に、iPhone 7 など、画面が小さい端末で見てみるとよくわかります。
なお、Android では再現せず、iOS でだけ発生します。
…Cordova でアプリを開発しているときにも思ったのですが、何故 iOS はキーボードが画面に重なるように表示されるのでしょう…。
個人的には、Android のように、キーボードの高さ分だけ画面の高さが低くなって欲しいものです。

 

さて、対処法ですが、「react-native-dialog」の GitHub の Issues に非常に参考になる投稿がありました!

Dialogue Buttons are covered by Keyboard · Issue #38 · mmazzarolo/react-native-dialog · GitHub
https://github.com/mmazzarolo/react-native-dialog/issues/38

上記によると、<Dialog.Container> に、contentStyle={{ marginBottom: 45 }} を追加するだけでOKとのことでした。
サンプルコードは下記の通りです。

<Dialog.Container
  contentStyle={{ marginBottom: 45 }}>
  ......
</Dialog.Container>

…これだけ?と思いましたが、実際に上記を追加してアプリで挙動を確認してみたところ、確かにダイアログ下部の OK とキャンセルボタンがスムーズに押せるくらい、ダイアログ全体が上に上がっていました!
シミュレーター の iPhone 7 と iPhone 11 で確認してみましたが、どちらもスムーズにダイアログのボタンを押すことができました。
しかも、キーボードが表示されていない時は、ダイアログは端末の画面中央に表示されており、違和感はありませんでした。

なお、Android で動作させることも考え、最終的なコードは下記のようになりました。

<Dialog.Container
  contentStyle={{ marginBottom: Platform.OS === 'android' ? 10 : 45 }}>
  ...
</Dialog.Container>

実機で確認しながら調整したところ、上記のようにするとちょうど良さそうでした。

最初は自力でやろうとして <KeyboardAvoidingView> を追加したりしていましたが…当たり前ですが調べた方が早いし確実でしたね。

 

以上、React Native の「react-native-dialog」ライブラリを使ってダイアログを表示した時、iOS でダイアログの下部にあるボタンがキーボードに隠れてしまう時の対処法でした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG