@logicwind/react-native-status-bar-height
Version:
A React Native library for retrieving the status bar height on both Android and iOS.
71 lines (69 loc) • 2.73 kB
JavaScript
;
import { Dimensions, NativeModules, Platform, StatusBar } from 'react-native';
const LINKING_ERROR = `The package '@logicwind/react-native-status-bar-height' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
ios: "- You have run 'pod install'\n",
default: ''
}) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
const ReactNativeStatusBarHeight = NativeModules.ReactNativeStatusBarHeight ? NativeModules.ReactNativeStatusBarHeight : new Proxy({}, {
get() {
throw new Error(LINKING_ERROR);
}
});
// Constants for iPhone status bar heights
const STATUSBAR_DEFAULT_HEIGHT = 20;
const STATUSBAR_X_HEIGHT = 44;
const STATUSBAR_IP12_HEIGHT = 47;
const STATUSBAR_IP14PRO_HEIGHT = 49;
const STATUSBAR_IP15_HEIGHT = 50;
const STATUSBAR_IP16_HEIGHT = 52;
const STATUSBAR_IPAD_HEIGHT = 24;
const {
height: W_HEIGHT,
width: W_WIDTH
} = Dimensions.get('window');
const getFallbackStatusBarHeight = () => {
// iPhone X, XS, 11 Pro, 12 mini, 13 mini
if (W_WIDTH === 375 && W_HEIGHT === 812) return STATUSBAR_X_HEIGHT;
// iPhone XS Max, XR, 11, 11 Pro Max
if (W_WIDTH === 414 && W_HEIGHT === 896) return STATUSBAR_X_HEIGHT;
// iPhone 12, 12 Pro, 13, 13 Pro, 14
if (W_WIDTH === 390 && W_HEIGHT === 844) return STATUSBAR_IP12_HEIGHT;
// iPhone 12 Pro Max, 13 Pro Max, 14 Plus
if (W_WIDTH === 428 && W_HEIGHT === 926) return STATUSBAR_IP12_HEIGHT;
// iPhone 14 Pro
if (W_WIDTH === 393 && W_HEIGHT === 852) return STATUSBAR_IP14PRO_HEIGHT;
// iPhone 14 Pro Max, 15 Plus
if (W_WIDTH === 430 && W_HEIGHT === 932) return STATUSBAR_IP14PRO_HEIGHT;
// iPhone 15, 15 Pro
if (W_WIDTH === 393 && W_HEIGHT === 852) return STATUSBAR_IP15_HEIGHT;
// iPhone 15 Pro Max, 16 Plus
if (W_WIDTH === 430 && W_HEIGHT === 932) return STATUSBAR_IP15_HEIGHT;
// iPhone 16, 16 Pro
if (W_WIDTH === 396 && W_HEIGHT === 860) return STATUSBAR_IP16_HEIGHT;
// iPhone 16 Pro Max
if (W_WIDTH === 432 && W_HEIGHT === 940) return STATUSBAR_IP16_HEIGHT;
// iPads (general fallback)
if (Platform.OS === 'ios' && Platform.isPad) return STATUSBAR_IPAD_HEIGHT;
return STATUSBAR_DEFAULT_HEIGHT;
};
export const fetchStatusBarHeight = () => {
if (Platform.OS === 'ios' && !Platform.isTV) {
try {
if (ReactNativeStatusBarHeight.STATUS_BAR_HEIGHT !== 0) {
return ReactNativeStatusBarHeight.STATUS_BAR_HEIGHT;
}
return getFallbackStatusBarHeight();
} catch {
return getFallbackStatusBarHeight();
}
}
return StatusBar.currentHeight ?? 0;
};
export const fetchBottomInset = () => {
try {
return ReactNativeStatusBarHeight.BOTTOM_SAFE_AREA;
} catch {
return 0;
}
};
//# sourceMappingURL=index.js.map