【React Native】「react-native-keyboard-accessory」ライブラリでキーボード上部に設置したDoneボタンの上に余白ができる

以前紹介した、「react-native-keyboard-accessory」ライブラリでソフトウェアキーボード上部に Done ボタンを設置したのですが、ノッチのある端末でのみ、その上部に余白ができることが判明しました。
動作に支障はないのですが、見た目がよろしくない…ということで、調査したところ、<SafeAreaView> が原因のようでした。
どうやら、画面下部のノッチの余白部分が悪さをしていたみたいでした。

 

ライブラリの導入等については、こちらの以前投稿した記事をご覧ください。

【React Native】「react-native-keyboard-accessory」でiOSのソフトウェアキーボードの上にDoneボタンを設置する
https://cpoint-lab.co.jp/article/202106/20321/

さて、プロジェクトには react-navigation ライブラリを導入しており、ページ下の余白を調節すれば、<SafeAreaView> をはずしても問題なかったため、最終的に下記のようなコードになりました。

import { ScrollView, View, Platform } from 'react-native';
import { KeyboardAccessoryNavigation } from 'react-native-keyboard-accessory'
import { getBottomSpace } from 'react-native-iphone-x-helper';

<View style={{ flex: 1 }}>
  <ScrollView contentContainerStyle={{ paddingBottom: getBottomSpace(), }}>
    ......

  </ScrollView>
  { Platform.OS === 'ios' && <KeyboardAccessoryNavigation doneButtonTitle={strings.keyboardDone} avoidKeyboard androidAdjustResize nextHidden={true} previousHidden={true} />}
</View>

前回との違いは、<SafeAreaView> をはずして、<KeyboardAccessoryNavigation>inSafeAreaView を削除している点です。

あとは、<ScrollView>contentContainerStylepaddingBottom: getBottomSpace() を追加し、ページ下部に、端末下部のノッチ分の余白を追加しています。
こちらを追加することで、ノッチありの端末で見た時に、一番下のページコンテンツが画面下にめり込む現象を防いでいます。

なお、<KeyboardAccessoryNavigation> は iOS の時のみ使用するようにしています。
Android の端末でも動作はしたのですが、iOS っぽいデザインの Done ボタンが Android のキーボードの上部にあることに凄く違和感があり、このようにしました。
こちらは個人的な好みなので、アプリのデザインなどによっては、Android でも Done を表示していてもいいと思います。
とりあえず、とにかく実際に Android と iOS の端末で動作確認をしてみるのをお勧めします!

 

以上、React Native の「react-native-keyboard-accessory」ライブラリを使ってキーボードの上部に追加した Done ボタンの上に余白ができる時の対処法についてでした。
ご参考になれば幸いです。

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

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

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

CTR IMG