Skip to content

chore(tabs): add test-tabs-layout-appearances-ios screen and scenario (iOS)#4085

Open
LKuchno wants to merge 10 commits into
mainfrom
@lkuchno/test-tabs-display-mode-ios
Open

chore(tabs): add test-tabs-layout-appearances-ios screen and scenario (iOS)#4085
LKuchno wants to merge 10 commits into
mainfrom
@lkuchno/test-tabs-display-mode-ios

Conversation

@LKuchno
Copy link
Copy Markdown
Collaborator

@LKuchno LKuchno commented May 22, 2026

Description

Adds a new manual test screen — Tab Bar Layout Appearances (iOS) — to apps/src/tests/single-feature-tests/tabs/. The screen exercises stackedLayoutAppearance, inlineLayoutAppearance, and compactInlineLayoutAppearance for TabsScreenAppearanceIOS, using tabBarItemTitleFontColor as the visual discriminator between buckets (red = stacked, blue = inline, green = compactInline) and tabBarItemTitleFontStyle: 'italic' on the selected state as the font-style signal. The scenario documents explicit iOS 18 vs. iOS 26+ differences: the inline bucket is not honored on iOS 26+ iPhones, and normal-state (unselected) color falls back to the system default on iOS 26+. This PR is iOS-only; no Android changes are included.

Closes:
https://github.com/software-mansion/react-native-screens-labs/issues/1466

Note: e2eCoverage is set to incomplete because Detox cannot introspect native UITabBarItem typographic attributes (font style, font color) — all verification steps are manual.

Changes

  • Test/Tabs: Added test-tabs-layout-appearances-ios/ scenario covering all three layout-appearance buckets (stacked, inline, compactInline), normal vs. selected state styling, and rotation-triggered bucket switching
  • Test/Tabs: Added scenario-description.ts declaring the scenario as iOS-only with e2eCoverage: 'incomplete' and smokeTest: false
  • Test/Tabs: Added scenario.md with full manual test steps, device/OS prerequisites, and iOS 18 vs. iOS 26+ caveats
  • Test/Tabs: Registered TestTabsLayoutAppearances in apps/src/tests/single-feature-tests/tabs/index.ts

Test visual presentation

iOS18.6 iPhone Pro iOS18.6 iPhone Pro Max iOS26.5 iPhone Pro
iPhone16ProiOS18.6.mov
iPhone16ProMAXiOS18.6.mov
iPhone17ProiOS26.5.mov

@LKuchno LKuchno changed the title test(tabs): add Tab Bar Layout Appearances scenario (iOS) chore(tabs): add Tab Bar Layout Appearances scenario (iOS) May 22, 2026
@LKuchno LKuchno added platform:ios Issue related to iOS part of the library area:tabs Issue related to bottom tabs type:chore A general maintenance task, that does not fall into other categories. labels May 22, 2026
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new iOS-only manual test scenario under the Tabs single-feature tests to exercise TabsScreenAppearanceIOS layout appearance buckets (stacked, inline, compactInline) and state-dependent title styling (color + italic on selected), including documented behavior differences on iOS 18 vs iOS 26+.

Changes:

  • Added a new Tabs test scenario screen (TestTabsLayoutAppearances) with per-bucket appearance configuration and an in-app “Info” explainer.
  • Added scenario metadata marking the scenario as iOS-only with e2eCoverage: 'incomplete'.
  • Added a detailed manual test plan (scenario.md) describing expected visuals and rotation-driven bucket switching; registered the scenario in the Tabs group index.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

File Description
apps/src/tests/single-feature-tests/tabs/test-tabs-layout-appearances-ios/scenario.md New manual test instructions and expected results for layout-appearance buckets across iOS versions/devices.
apps/src/tests/single-feature-tests/tabs/test-tabs-layout-appearances-ios/scenario-description.ts New scenario metadata (iOS-only, incomplete e2e coverage).
apps/src/tests/single-feature-tests/tabs/test-tabs-layout-appearances-ios/index.tsx New scenario UI implementing bucket-specific appearances and explanatory copy.
apps/src/tests/single-feature-tests/tabs/index.ts Registers the new scenario in the Tabs single-feature test group.
Comments suppressed due to low confidence (3)

apps/src/tests/single-feature-tests/tabs/test-tabs-layout-appearances-ios/scenario.md:41

  • The sentence has an extra dash ("appearance — is") which reads like a typo and makes the note harder to follow. Please adjust punctuation/wording for clarity.
- On **iOS 26**, the `normal` (unselected) state appearance — is not applied
to unselected tabs. All unselected tabs adopt a system-default appearance.

apps/src/tests/single-feature-tests/tabs/test-tabs-layout-appearances-ios/scenario.md:47

  • The last sentence is grammatically incorrect/unclear ("Instead of it compactInline configuration is displayed"). Please rephrase so it’s unambiguous what happens on iOS 26 (e.g. that compactInline is used instead of inline).
- On **iOS 26**, configuring the `inline` bucket has no visible effect on
iPhone because the system never activates the `inlineLayoutAppearance` on
that platform version. Testers should not expect blue titles to appear on
an iPhone running iOS 26. Instead of it `compactInline` configuration is displayed.

apps/src/tests/single-feature-tests/tabs/test-tabs-layout-appearances-ios/scenario.md:49

  • This note is grammatically incorrect and ambiguous ("Icon color is set to system default - for selected tab is blue..."). Please reword to clearly describe selected vs unselected icon colors (and whether this varies by iOS version/theme).
- Icon color is set to system default - for selected tab is blue and for
unselected black or gray depends on OS version.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@@ -0,0 +1,13 @@
import { ScenarioDescription } from "@apps/tests/shared/helpers";
Comment on lines +32 to +49
- iOS simulator or device running **iOS 18** and second with **iOS 26**.
- For full coverage of all three display modes:
- iPhone (any) in portrait → `stacked`
- iPhone Pro Max in landscape → `inline` (iOS 18 or lower only)
- iPhone Pro (non-Max) in landscape → `compactInline` (for iOS26 displayed also on Max)

## Note

- On **iOS 26**, the `normal` (unselected) state appearance — is not applied
to unselected tabs. All unselected tabs adopt a system-default appearance.
Therefore the normal / colored label on unselected tabs is only observable
on iOS 18.
- On **iOS 26**, configuring the `inline` bucket has no visible effect on
iPhone because the system never activates the `inlineLayoutAppearance` on
that platform version. Testers should not expect blue titles to appear on
an iPhone running iOS 26. Instead of it `compactInline` configuration is displayed.
- Icon color is set to system default - for selected tab is blue and for
unselected black or gray depends on OS version.
Comment on lines +67 to +70
In each case the{' '}
<Text style={styles.bold}>selected tab title is italic</Text> and the tab icon color is system default:{' '}
<Text style={{ color: PlatformColor('systemBlue') }}>blue</Text>;{'\n\n'}
The unselected tab titles font and icons color follows system default values: a normal font and gray or black colors. On iOS 18, the tab item label color is set to a darker shade of the bucket color while on iOS 26 it follows the system default.
@LKuchno LKuchno requested a review from kkafar May 22, 2026 14:15
@LKuchno LKuchno changed the title chore(tabs): add Tab Bar Layout Appearances scenario (iOS) chore(tabs): add test-tabs-layout-appearances-ios screen and scenario (iOS) May 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:tabs Issue related to bottom tabs platform:ios Issue related to iOS part of the library type:chore A general maintenance task, that does not fall into other categories.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants