Skip to content

fix: align Web tab bar widths with native measurements - #323

Merged
rdlabo merged 5 commits into
mainfrom
fix/phone-tab-bar-width
Oct 23, 2026
Merged

rdlabo merged 5 commits into
mainfrom
fix/phone-tab-bar-width

Conversation

@rdlabo

@rdlabo rdlabo commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Short two- and three-tab bars now use content-aware Web sizing instead of the width tuned for the four-tab demo. The native renderer reports its visible platter width for ordinary and searchable tabs, and the runtime retains that width when returning to Web rendering.

Layout requests measure the original CSS width, preventing repeated projection from progressively shrinking the bar. Web gestures preserve the measurement, padding changes recalculate the CSS width, and teardown restores original styles. Switching to Duo releases the phone measurement; returning to phone mode measures source CSS before applying the native width again. The system UITabBar remains in use, with compatibility for older native binaries that omit width measurements.

Validation:

  • 12 Chromium/WebKit width/handoff edge cases passed: two/three/four tabs, long labels, narrow/wide viewports, RTL, visible split-pane menus, Web presses, padding changes, resize, Duo mode round-trip, and teardown. Older local WebKit explicitly selects the iOS27 stylesheet branch.
  • Existing Chromium lifecycle/placement regressions: 3 passed during the initial review.
  • Native width measurement test rerun successfully on iPhone (iOS 27.0) and iPhone Duo (iOS 27.1) with all three PRs integrated.
  • CSS/TypeScript builds, TypeScript checking, formatting and diff checks passed during initial verification; final integration checks and CI run after incorporating main/fix: recover native UI synchronization without navigation #325.
  • Initial supervisor and independent acceptance review cycles reported no remaining blocking findings.

Final local integration of #323, #324 and #325 passed 157 unit tests, 26 Chromium/WebKit edge tests, TypeScript checking, CSS/native package builds and workspace lint. Native width measurement also passed on both iPhone and Duo simulators. No additional runtime changes were needed after integration.

@rdlabo

rdlabo commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

/beta

@github-actions

Copy link
Copy Markdown
Contributor

🚫 /beta did not publish commit 686eb5da1395. Required CI has not passed: Lint, E2E Screenshot Tests Pull Request. Run /beta again after CI succeeds.

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Playwright test results

passed  490 passed
flaky  1 flaky

Details

stats  491 tests across 26 suites
duration  3 minutes, 49 seconds
commit  a659042
info  This detailed result covers Ionic 9 only. Ionic 8 runs against the same screenshots in a separate matrix job; check the workflow run for both results. To update the screenshots, comment with /update-screenshots.

Flaky tests

chromium › native-ui.spec.ts › horizontal tabs retain measured native width on Web handoff without feeding it back

@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

📊 Ionic 9 Playwright Test Report

View the detailed Ionic 9 report after GitHub Pages deployment completes: https://rdlabo-dev.github.io/ionic-theme-ios27/pr-323/

Ionic 8 runs against the same screenshots in a separate matrix job. View both results in the workflow run.

@rdlabo
rdlabo merged commit 7d12419 into main Oct 23, 2026
16 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

npm beta published

CI passed for the merge commit 7d12419d9062. Install the immutable version with:

npm install @rdlabo/ionic-theme-ios27@2.0.2-beta.pr323.sha7d12419d9062 @rdlabo/capacitor-native-ui@2.0.2-beta.pr323.sha7d12419d9062

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant