chore(test): test-tabs-native-container-style test screen with scenario#4134
chore(test): test-tabs-native-container-style test screen with scenario#4134LKuchno wants to merge 13 commits into
Conversation
…ns into @lkuchno/test-tabs-native-container-style
There was a problem hiding this comment.
Pull request overview
Adds a new manual tabs test scenario (test-tabs-native-container-style) to exercise nativeContainerStyle.backgroundColor on TabsHost via a SettingsPicker, with accompanying scenario registration and documentation for iOS/Android visual verification.
Changes:
- Added a new two-tab scenario (Config + Tab) that updates
nativeContainerStyle.backgroundColorat runtime. - Registered the scenario in the tabs single-feature-tests group.
- Added a manual
scenario.mddescribing expected rendering/persistence behaviors across platforms.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| apps/src/tests/single-feature-tests/tabs/test-tabs-native-container-style/scenario.md | Manual steps/expectations for verifying native container background behavior. |
| apps/src/tests/single-feature-tests/tabs/test-tabs-native-container-style/scenario-description.ts | Scenario metadata used to register/display the scenario. |
| apps/src/tests/single-feature-tests/tabs/test-tabs-native-container-style/index.tsx | Scenario implementation: picker-driven host config updates + two-tab layout. |
| apps/src/tests/single-feature-tests/tabs/index.ts | Registers the new scenario in the Tabs scenario group. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| import { View, Text, ScrollView, StyleSheet } from 'react-native'; | ||
| import { scenarioDescription } from './scenario-description'; | ||
| import { createScenario } from '@apps/tests/shared/helpers'; | ||
| import { SettingsPicker } from '@apps/shared'; | ||
| import { Colors } from '@apps/shared/styling'; | ||
| import type { ColorValue } from 'react-native'; |
| if (bgColor !== undefined) { | ||
| console.warn( | ||
| `[test-tabs-native-container-style] Unrecognized nativeContainerStyle.backgroundColor: ${String(bgColor)}. ` + | ||
| `Picker shows 'unset' but a native color may be set. This may indicate a platform-specific color serialization issue.` | ||
| ); |
|
|
||
| ## Note | ||
|
|
||
| - The color change applies immediately upon selecting a new value; no |
There was a problem hiding this comment.
Is this note necessary? Isn't the immediate change always expected and we should only note this if the change requires restart?
There was a problem hiding this comment.
I removed it and refactored note section with information about tab bar bg color behavior across the platform - this made me to refactor screen to check behavior with transparent and no transparent background settings for android and ios18 and lower
d23fe90
| - [ ] **iOS 26:** The blue color is visible behind the tab content area and through the liquid glass tab bar. | ||
| - [ ] **Android:** The blue color is visible in the area surrounding the focused content screen. The tab bar retains the system default background color. | ||
|
|
||
| 3. Tap the **Tab** tab in the tab bar. |
There was a problem hiding this comment.
nit: we can rename the second tab because "Tap the Tab tab" sounds funny, but we can keep it as well - up to you.
| may partially obscure the color unless the tab bar has a transparent | ||
| or semi-transparent background. | ||
| - On Android the color fills the `FrameLayout` container, which is | ||
| visible in the gutters around the focused screen content and behind |
… transparent/no-transparent tab bar bg, updating scenario
…r fully transparent - scenario polishing
…ns into @lkuchno/test-tabs-native-container-style
| ios: { | ||
| ...DEFAULT_TAB_ROUTE_OPTIONS.ios, | ||
| scrollEdgeAppearance: { | ||
| tabBarBackgroundColor: Colors.RedDark100, | ||
| }, | ||
| }, |

Description
Adds a new test screen with manual scenario (
test-tabs-native-container-style) that exercises thenativeContainerStyleprop onTabsHost. The scenario allows the user to pick a container background color (unset / blue / yellow / purple) via aSettingsPickerand observe the native container styling behavior on both iOS and Android.Platform surfaces covered: on iOS the color is applied to the
UITabBarController's root view (behind both the content area and the tab bar); on Android it is applied to theFrameLayoutwrapping the focused screen and theBottomNavigationView. Thescenario.mddocuments platform-specific rendering differences between iOS 18, iOS 26, and Android API 36, as well as tab-switching persistence and rapid cycling edge-case steps.Closes: https://github.com/software-mansion/react-native-screens-labs/issues/1412
Changes
test-tabs-native-container-stylescenario directory with a two-tab layout (Config + Transparent) covering background color selection viaSettingsPickerfor both iOS and Android. First tab has tabBarBackgroundColor set to Red (Android and iOS 18 and lower), Transparent tab has tabBarBackgroundColor set to transparent (Android) or not set (iOS 18 and lower -> no scrollEdgeAppearance falls into transparent)scenario-description.tsregistering the scenario for both platforms withe2eCoverage: 'incomplete'andsmokeTest: falsescenario.mdwith full manual test steps.TestTabsNativeContainerStyleinapps/src/tests/single-feature-tests/tabs/index.tsTest visual documentation
Screen.Recording.2026-06-11.at.08.39.43.mov
Screen.Recording.2026-06-11.at.09.09.01.mov
Screen.Recording.2026-06-11.at.09.09.33.mov