native-base
Version:
Essential cross-platform UI components for React Native
37 lines (32 loc) • 1.03 kB
text/typescript
import * as React from 'react';
import { Keyboard, Platform, KeyboardEvent } from 'react-native';
export const useKeyboardBottomInset = () => {
const [bottom, setBottom] = React.useState(0);
const subscriptions = React.useRef<any[]>([]);
React.useEffect(() => {
function onKeyboardChange(e: KeyboardEvent) {
if (
e.startCoordinates &&
e.endCoordinates.screenY <= e.startCoordinates.screenY
)
setBottom(e.endCoordinates.height / 2);
else setBottom(0);
}
if (Platform.OS === 'ios') {
subscriptions.current = [
Keyboard.addListener('keyboardWillChangeFrame', onKeyboardChange),
];
} else {
subscriptions.current = [
Keyboard.addListener('keyboardDidHide', onKeyboardChange),
Keyboard.addListener('keyboardDidShow', onKeyboardChange),
];
}
return () => {
subscriptions.current.forEach((subscription) => {
subscription.remove();
});
};
}, [setBottom, subscriptions]);
return bottom;
};