- Web Engineer
- アウトバウンド営業
- Webエンジニア(経験者)
- Other occupations (18)
- Development
- Business
KeyboardAvoidingViewとは
スマートフォンの仮想キーボードで表示が隠れないようにするViewです。
これを設定すれば例えば以下のようにキーボードにTextInputが隠れてしまう場合などで、
隠れない位置までスクロールしてくれるようになります。
KeyboardAvoidingViewあり
KeyboardAvoidingViewなし
キーボードに合わせてTextInputがうまくスクロールしない
例えば以下のようなflexを用いたフォームの場合、
export default function RootLayout() {
const [text, setText] = useState<string>('');
return (
<SafeAreaProvider>
<SafeAreaView className="h-full bg-white">
<KeyboardAvoidingView behavior='padding'>
<TouchableWithoutFeedback onPress={Keyboard.dismiss}>
<View className='h-full'>
<View className='m-5'>
<Text className='text-3xl text-center text-slate-600'>タイトル</Text>
</View>
<View className='flex gap-10 p-5 pb-10 bg-gray-200'>
<Text className='text-2xl text-center text-slate-600'>テキスト</Text>
{[...new Array(5)].map((index) => (
<TextInput
key={index}
className='w-full p-2 border border-gray-300 rounded text-2xl bg-neutral-50'
value={text} onChangeText={setText}
placeholder='TextInput'
/>
))}
</View>
<View>
<Text className='text-3xl text-center text-slate-600'>送信</Text>
</View>
</View>
</TouchableWithoutFeedback>
</KeyboardAvoidingView>
</SafeAreaView>
</SafeAreaProvider>
);
}
以下の画像の通り、キーボードに隠れる要素にフォーカスを当てた場合にうまく機能しない時があります。
通常時
キーボード出現時
解決方法
justyfy-endを利用した上で、最下部にflex-growのViewを入れることで解決できます。
export default function RootLayout() {
const [text, setText] = useState<string>('');
return (
<SafeAreaProvider>
<SafeAreaView className="h-full bg-white">
<KeyboardAvoidingView behavior='padding' className='h-full'>
<TouchableWithoutFeedback onPress={Keyboard.dismiss}>
<View className='h-full justify-end'>
<View className='m-5'>
<Text className='text-3xl text-center text-slate-600'>タイトル</Text>
</View>
<View className='flex gap-10 p-5 pb-10 bg-gray-200'>
<Text className='text-2xl text-center text-slate-600'>テキスト</Text>
{[...new Array(5)].map((index) => (
<TextInput
key={index}
className='h-[50px] w-full p-2 border border-gray-300 rounded text-2xl bg-neutral-50'
value={text} onChangeText={setText}
placeholder='TextInput'
/>
))}
</View>
<View>
<Text className='text-3xl text-center text-slate-600'>送信</Text>
</View>
<View className='flex-grow' />
</View>
</TouchableWithoutFeedback>
</KeyboardAvoidingView>
</SafeAreaView>
</SafeAreaProvider>
);
}
ただし上部側のTextInputのフォーカスでも同様のスクロールをしてしまうので、TextInputが多くある画面には向きません。
その場合はKeyboardAwareScrollViewを利用しましょう!
KeyboardAwareScrollViewを使った解決方法
以下を参考に導入して、KeyboardAvoidingViewを置き換えるだけです。
…
記事の続きは下のURLをクリック!
https://rightcode.co.jp/blogs/50433
エンジニア積極採用中です!
現在、WEBエンジニア、モバイルエンジニア、デザイナー、営業などを積極採用中です!
採用ページはこちら:https://rightcode.co.jp/recruit
社員の声や社風などを知りたい方はこちら:https://rightcode.co.jp/blogs?category=life
社長と一杯飲みながらお話しませんか?(転職者向け)
特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk
もっとワクワクしたいあなたへ
現在、ライトコードでは「WEBエンジニア」「モバイルエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「営業」などを積極採用中です!
ライトコードは技術力に定評のある受託開発をメインにしているIT企業です。
有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。
- もっと大きなことに挑戦したい!
- エンジニアとしてもっと成長したい!
- モダンな技術に触れたい!
現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?
ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。
- ライトコードの魅力を知っていただきたい!
- 社風や文化なども知っていただきたい!
- 技術に対して熱意のある方に入社していただきたい!
一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。