diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt index ca1dfe7a54..74afd09c03 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt @@ -193,6 +193,13 @@ class TabsHost( updateNavigationMenuIfNeeded(oldValue, newValue) } + var tabBarHidden: Boolean by Delegates.observable(false) { _, oldValue, newValue -> + if (newValue != oldValue) { + updateInterfaceInsets() + updateNavigationMenuIfNeeded(oldValue, newValue) + } + } + private fun updateNavigationMenuIfNeeded( oldValue: T, newValue: T, @@ -491,9 +498,15 @@ class TabsHost( val newHeight = bottom - top if (newHeight != oldHeight) { - interfaceInsetsChangeListener?.apply { - this.onInterfaceInsetsChange(EdgeInsets(0.0f, 0.0f, 0.0f, newHeight.toFloat())) - } + updateInterfaceInsets(newHeight) + } + } + + private fun updateInterfaceInsets(newHeight: Int? = null) { + val height = if (tabBarHidden) 0 else (newHeight ?: bottomNavigationView.height) + + interfaceInsetsChangeListener?.apply { + this.onInterfaceInsetsChange(EdgeInsets(0.0f, 0.0f, 0.0f, height.toFloat())) } } diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt index 75e0918790..0f9fc4eda8 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostAppearanceApplicator.kt @@ -26,7 +26,7 @@ class TabsHostAppearanceApplicator( } fun updateSharedAppearance(tabsHost: TabsHost) { - bottomNavigationView.isVisible = true + bottomNavigationView.isVisible = !tabsHost.tabBarHidden bottomNavigationView.setBackgroundColor( tabsHost.tabBarBackgroundColor ?: resolveColorAttr(com.google.android.material.R.attr.colorSurfaceContainer), diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostViewManager.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostViewManager.kt index d700255473..c8f3a820fe 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostViewManager.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHostViewManager.kt @@ -142,10 +142,13 @@ class TabsHostViewManager : value: String?, ) = Unit + @ReactProp(name = "tabBarHidden") override fun setTabBarHidden( view: TabsHost, value: Boolean, - ) = Unit + ) { + view.tabBarHidden = value + } // Android additional diff --git a/src/components/bottom-tabs/BottomTabs.types.ts b/src/components/bottom-tabs/BottomTabs.types.ts index 4dae7493ee..4668bd484f 100644 --- a/src/components/bottom-tabs/BottomTabs.types.ts +++ b/src/components/bottom-tabs/BottomTabs.types.ts @@ -38,6 +38,15 @@ export interface BottomTabsProps extends ViewProps { ) => void; // #endregion Events + // #region General + /** + * @summary Hides the tab bar. + * + * @default false + */ + tabBarHidden?: boolean; + // #endregion General + // #region Android-only appearance /** * @summary Specifies the background color for the entire tab bar. @@ -204,14 +213,6 @@ export interface BottomTabsProps extends ViewProps { * @supported iOS 18 or higher */ tabBarControllerMode?: TabBarControllerMode; - /** - * @summary Hides the tab bar. - * - * @default false - * - * @platform ios - */ - tabBarHidden?: boolean; // #endregion iOS-only appearance // #region Experimental support