以前紹介した、「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> の contentContainerStyle に paddingBottom: getBottomSpace() を追加し、ページ下部に、端末下部のノッチ分の余白を追加しています。
こちらを追加することで、ノッチありの端末で見た時に、一番下のページコンテンツが画面下にめり込む現象を防いでいます。
なお、<KeyboardAccessoryNavigation> は iOS の時のみ使用するようにしています。
Android の端末でも動作はしたのですが、iOS っぽいデザインの Done ボタンが Android のキーボードの上部にあることに凄く違和感があり、このようにしました。
こちらは個人的な好みなので、アプリのデザインなどによっては、Android でも Done を表示していてもいいと思います。
とりあえず、とにかく実際に Android と iOS の端末で動作確認をしてみるのをお勧めします!
以上、React Native の「react-native-keyboard-accessory」ライブラリを使ってキーボードの上部に追加した Done ボタンの上に余白ができる時の対処法についてでした。
ご参考になれば幸いです。
 
					         
               
                       
												 
                