diff --git a/app.json b/app.json index 957ab225..eedbe607 100644 --- a/app.json +++ b/app.json @@ -16,6 +16,7 @@ }, "ios": { "supportsTablet": true, + "requireFullScreen": true, "icon": "./assets/ios/AppIcon.appiconset/Icon-App-60x60@3x.png", "buildNumber": "22", "infoPlist": { diff --git a/src/navigation/AppNavigator.tsx b/src/navigation/AppNavigator.tsx index b6c31e0e..63e2b17e 100644 --- a/src/navigation/AppNavigator.tsx +++ b/src/navigation/AppNavigator.tsx @@ -3,6 +3,7 @@ import { NavigationContainer, DefaultTheme as NavigationDefaultTheme, DarkTheme import { createNativeStackNavigator, NativeStackNavigationOptions, NativeStackNavigationProp } from '@react-navigation/native-stack'; import { createBottomTabNavigator, BottomTabNavigationProp } from '@react-navigation/bottom-tabs'; import { useColorScheme, Platform, Animated, StatusBar, TouchableOpacity, View, Text, AppState, Easing, Dimensions } from 'react-native'; +import RNImmersiveMode from 'react-native-immersive-mode'; import { mmkvStorage } from '../services/mmkvStorage'; import { PaperProvider, MD3DarkTheme, MD3LightTheme, adaptNavigationTheme } from 'react-native-paper'; import type { MD3Theme } from 'react-native-paper'; @@ -862,7 +863,6 @@ const MainTabs = () => { // Prefer native lazy/freeze when available; still pass for parity lazy: true, freezeOnBlur: true, - tabBarStyle: { display: 'none' }, }} > { /> null} + tabBar={renderTabBar} screenOptions={({ route, navigation, theme }) => ({ transitionSpec: { animation: 'timing', @@ -1059,6 +1059,14 @@ const InnerNavigator = ({ initialRouteName }: { initialRouteName?: keyof RootSta // Handle Android-specific optimizations useEffect(() => { if (Platform.OS === 'android') { + // Hide system navigation bar + try { + RNImmersiveMode.setBarMode('Bottom'); + RNImmersiveMode.fullLayout(true); + } catch (error) { + console.log('Immersive mode error:', error); + } + // Ensure consistent background color for Android StatusBar.setBackgroundColor('transparent', true); StatusBar.setTranslucent(true);