Skip to content

iPad - Main menu in Liquid Glass UI on iPad (iPadOS 27) is located at the top and small #104423

Open

Description

@applause-bot

If you haven’t already, check out our contributing guidelines for onboarding. To join our Slack channel, fill out this form.


Version Number: 9.5.14-0
Reproducible in staging?: Yes
Reproducible in production?: N/A - new feature, doesn't exist in prod
If this was caught during regression testing, add the test name, ID and link from BrowserStack: Exp
Email or phone of affected tester (no customers): fischer9966+053122@gmail.com
Issue reported by: Applause Internal Team
Bug source: Exploratory - Significant User Experience Deterioration
Device used: iPad 9th Gen 10" / iPadOS 27.0.1
App Component: Other

Action Performed:

  1. Open Expensify App on iPad with iPadOS 27
  2. Login with any account
  3. Check what the main menu looks like and where it is located

Expected Result:

The main menu is located at the bottom of the screen and is of a standard size for Liquid Glass UI

Actual Result:

The main menu is located at the top of the screen and is small in size which differs from the Liquid Glass UI standards.

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: iPad (iPadOS 27)
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome Safari

Screenshots/Videos

Image Image

View all open jobs on GitHub

Applause Internal Information
Exported by: Svetlana Lazutkina
Bug ID: 7290614

Issue OwnerCurrent Issue Owner: @war-in

Activity

  1. added
    DeployBlockerCashThis issue or pull request should block deployment
    BugSomething is broken. Auto assigns a BugZero manager.
    on Oct 19, 2026
  2. melvin-bot commented on Oct 19, 2026

    @melvin-bot

    Triggered auto assignment to @stitesExpensify (DeployBlockerCash), see https://stackoverflowteams.com/c/expensify/questions/9980/ for more details.

  3. melvin-bot commented on Oct 19, 2026

    @melvin-bot

    💬 A slack conversation has been started in #expensify-open-source

  4. github-actions commented on Oct 19, 2026

    @github-actions
    Contributor

    👋 Friendly reminder that deploy blockers are time-sensitive ⏱ issues! Check out the open `StagingDeployCash` deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:

    1. Identify the pull request that introduced this issue and revert it.
    2. Find someone who can quickly fix the issue.
    3. Fix the issue yourself.
  5. MelvinBot commented on Oct 19, 2026

    @MelvinBot
    Contributor

    Deploy Blocker Analysis

    Causing PR: Add liquid glass bottom tab bar to iOS, Android and mWeb, which is not part of 9.5.14. It merged on 2026-10-15. It shipped in Deploy Checklist: New Expensify 2026-10-16, and that release went to production today. So this bug should already reproduce on production (9.5.13-6) on iPadOS 26+. The issue's "N/A - new feature" note is out of date.

    Recommendation: demote and fix forward. Don't revert anything. No PR in the current Deploy Checklist: New Expensify 2026-10-19 changes where the tab bar sits. Every tab still works; the bar is only small and its labels are cut off. Confirm the bug reproduces on production 9.5.13-6, then remove DeployBlockerCash.

    Confidence: High.

    Root cause
    • On iPadOS 18 and later, a UITabBarController in a regular-width layout draws a small floating tab bar at the top. This is the default UIKit behavior.
    • The App sets tabBarControllerMode: 'tabBar'. That setting only turns off the sidebar. It doesn't move the bar to the bottom. Moving it needs a compact horizontalSizeClass trait override. Neither react-native-screens 4.28.0 nor the App's patches set one.
    • On native, useResponsiveLayout hardcodes isSmallScreenWidth = true. As a result, NativeTabLayout always uses the native bar on iPad.
    • Each tab label is drawn into its icon image, which is sized for a phone's bottom bar. The compact top bar shrinks those images, so the labels get cut off ("ccour", "Spend'" in the screenshots).

    Ruled out: Fix bottom tab appears on non-root paths after killing and relaunching the app is the only 9.5.14 PR that touches this navigator. It only controls whether the bar is visible, not where it sits.

    Fix options
    1. Patch react-native-screens to set traitOverrides.horizontalSizeClass = .compact on the tab bar controller, and set it back to regular on the child view controllers.
    2. Or use the JS tab bar instead of the native one on iPad.
    3. With either option, size the labels from the real bar width, or stop drawing labels into the icons in regular width.

    Possible owners: sumo-slonik (PR author), plus grgia and ZhenjaHorbach (reviewers). Related follow-up: [Liquid Glass Follow Up] Fix native tab bar issues when the Insights beta is on.

    I didn't test this, because iPadOS 27 can't be reproduced on web.


    Next Steps: Reply with @MelvinBot <your feedback> to refine this analysis.

  6. 9 remaining items

  7. melvin-bot commented on Oct 27, 2026

    @melvin-bot

    @ZhenjaHorbach Still overdue 6 days?! Let's take care of this!

  8. melvin-bot commented on Oct 29, 2026

    @melvin-bot

    @ZhenjaHorbach Now this issue is 8 days overdue. Are you sure this should be a Daily? Feel free to change it!

  9. war-in commented on Nov 2, 2026

    @war-in
    Contributor

    @shawnborton I experimented with our options and here is what I found

    The perfect solution (in my opinion). Icons and titles are both present in the bar. Also, RBR and GBR work as expected
    Downside: it requires a custom react-native-screens patch that most likely won't be accepted upstream

    Image Image

    Text-only tabs. It doesn't require any custom code and can be achieved today with one small PR
    Downsides: There are no badges, and icons are gone

    Image Image

    Text-only tabs with native indicators.
    Downsides: There are badges, but they can only be red

    Image

    Probably the most controversial, but truly native.
    Downsides: It requires react-native-screens upgrade and completely changes how the app looks on iPads 😅
    Disclaimer: this is the raw POC; the sidebar can be styled properly and look more like

    apple music

    Image

    Image Image

    Let me know what you think and which direction feels the best for you 🙏

  10. shawnborton commented on Nov 2, 2026

    @shawnborton
    Contributor

    Hmm I would be curious what @chuckdries thinks here. I think the idea was that we wanted to support our normal wide app styles, at which point we can just not need any kind of tabs for landscape layouts. And we should consider the upcoming flat nav changes too.

    Then we only really need to worry about portrait mode, at which case I would think we could just use similar styles that native mobile uses?

  11. shawnborton commented on Nov 2, 2026

    @shawnborton
    Contributor

    As for styles though, I would expect the tabs to look more like this:

    Image
  12. melvin-bot commented on Nov 2, 2026

    @melvin-bot

    @war-in @ZhenjaHorbach this issue was created 2 weeks ago. Are we close to a solution? Let's make sure we're treating this as a top priority. Don't hesitate to create a thread in #expensify-open-source to align faster in real time. Thanks!

  13. chuckdries commented on Nov 2, 2026

    @chuckdries
    Contributor

    I am not sure we want to go full native on the nav sidebar. I think liquid glass for the tab buttons is a nice aesthetic touch that makes it feel more at home on the platform, but I feel like using the native view for the sidebar itself has diminishing returns. I'd like to minimize how much the code has to diverge versus web and android, especially since it seems like we might have big sidebar changes coming down the pipe.

  14. melvin-bot commented on Nov 2, 2026

    @melvin-bot

    @ZhenjaHorbach 12 days overdue now... This issue's end is nigh!

  15. melvin-bot commented on Nov 3, 2026

    @melvin-bot

    @ZhenjaHorbach 12 days overdue. Walking. Toward. The. Light...

  16. chuckdries commented on Nov 3, 2026

    @chuckdries
    Contributor

    I've reassigned the K2 ownership star so @war-in's comments reset the overdue timer. I'm going to toggle the reviewing label to reset it manually just this once

  17. war-in commented on Nov 5, 2026

    @war-in
    Contributor

    Ok, so let's do minimal changes so the app looks good on ipad and we can revisit those ideas when flat nav is there!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

BugSomething is broken. Auto assigns a BugZero manager.DailyKSv2Engineering

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions