Skip to content

[iOS] Fix transparent Shell navigation bar appearing opaque after keyboard dismiss - #35960

Merged
kubaflo merged 4 commits into
dotnet:inflight/currentfrom
Shalini-Ashokan:fix-35902
Jun 24, 2026
Merged

[iOS] Fix transparent Shell navigation bar appearing opaque after keyboard dismiss#35960
kubaflo merged 4 commits into
dotnet:inflight/currentfrom
Shalini-Ashokan:fix-35902

Conversation

@Shalini-Ashokan

@Shalini-Ashokan Shalini-Ashokan commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Note

Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!

Issue Details

On iOS, when Shell.BackgroundColor="Transparent", navigating to a secondary page correctly shows the nav bar as transparent. After tapping an Entry and dismissing the keyboard, the navigation bar incorrectly appears with a solid opaque background, hiding the page color beneath it.

Root Cause

PR #33958 added an OnKeyboardWillHide handler in ShellPageRendererTracker to fix issue #33547, which repositions the page frame from Y=0 to Y=navBarBottom whenever the keyboard closes. For transparent Shell, Y=0 is intentional (page content extends behind the bar), but the handler moved the frame unconditionally, pulling content out from under the transparent nav bar and making it appear opaque.

Description of Change

A guard was added inside OnKeyboardWillHide to skip the frame adjustment when the navigation bar is transparent, since the page content at Y=0 is intentional in that case. The guard checks navBar.Translucent, which MAUI already sets to true for transparent Shell making it a reliable signal. The original #33547 fix is fully preserved for opaque navigation bars

Validated the behavior in the following platforms

  • Android
  • Windows
  • iOS
  • Mac

Issues Fixed

Fixes #35902

Output ScreenShot

Before After
35092-BeforeFix.mov
35092-AfterFix.mov

@github-actions

github-actions Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35960

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35960"

@github-actions github-actions Bot added area-controls-shell Shell Navigation, Routes, Tabs, Flyout platform/ios labels Jun 17, 2026
@sheiksyedm sheiksyedm added the partner/syncfusion Issues / PR's with Syncfusion collaboration label Jun 17, 2026
@kubaflo

kubaflo commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

/review -b feature/enhanced-reviewer -p ios

@github-actions github-actions Bot added the s/agent-review-in-progress AI review is currently running for this PR label Jun 17, 2026
@MauiBot MauiBot added s/agent-fix-win AI found a better alternative fix than the PR s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Jun 17, 2026
MauiBot

This comment was marked as outdated.

@MauiBot MauiBot removed the s/agent-review-in-progress AI review is currently running for this PR label Jun 17, 2026

@kubaflo kubaflo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you try the ai's suggestions?

@vishnumenon2684

Copy link
Copy Markdown
Contributor

/azp run maui-pr-uitests

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@Shalini-Ashokan

Copy link
Copy Markdown
Contributor Author

Could you try the ai's suggestions?

The try-fix-1 does fix the issue, but HasTransparentShellBackground() is over-engineered — since Shell.BackgroundColor is always set on the Shell root, the tree walk is unnecessary.

kubaflo
kubaflo previously approved these changes Jun 18, 2026
@kubaflo

This comment has been minimized.

@github-actions github-actions Bot added the s/agent-ready-for-rerun AI review has a new PR-author comment or commit and is ready for rerun label Jun 19, 2026
@kubaflo

kubaflo commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

/review tests

@kubaflo

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Tests Failure Analysis

@Shalini-Ashokan — test-failure review results are available based on commit f027167.
To request a fresh review after new comments, commits, or CI runs, comment /review tests.

Overall No failures found Failures 0

Test Failure Review: No failures found - click to expand

Overall verdict: No failures found

All GitHub check runs for this PR completed successfully. The maui-pr build (build ID 1472416) and all associated jobs — Windows/macOS builds, Helix unit tests, and integration tests — passed. No failing, pending, or inconclusive checks were detected.

Failure Verdict Evidence
No failures to report

Recommended action

No test-failure action is needed. All CI checks passed for commit f027167.

Evidence details
  • All checks completed: maui-pr (SUCCESS), Build Analysis (SUCCESS), license/cla (SUCCESS), Helix Unit Tests Windows (Debug/Release) (SUCCESS), all Integration Tests jobs (SUCCESS).
  • AzDO build ID: 1472416
  • No AzDO authenticated token was available; authenticated test-run APIs were skipped. Build metadata, timelines, and public logs were still accessible.
  • Device tests (maui-pr-devicetests) and UI tests (maui-pr-uitests) were not present in the check rollup for this run; hidden device-test failures via XHarness could not be verified for those pipelines.

@kubaflo kubaflo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you check the ai's suggestions?

@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Expert Review — 2 findings

See inline comments for details.

MauiBot

This comment was marked as outdated.

@kubaflo kubaflo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Tests are failing - could you please verify

@kubaflo

kubaflo commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

/azp run

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 3 pipeline(s).

@github-actions github-actions Bot added the s/agent-review-in-progress AI review is currently running for this PR label Jun 22, 2026
@MauiBot MauiBot added s/agent-gate-passed AI verified tests catch the bug (fail without fix, pass with fix) s/agent-fix-win AI found a better alternative fix than the PR and removed s/agent-gate-failed AI could not verify tests catch the bug s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates labels Jun 22, 2026

@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

AI Review Summary

@Shalini-Ashokan — new AI review results are available based on this last commit: e0d5af2. To request a fresh review after new comments or commits, comment /review rerun.

Gate Passed Confidence Low Platform iOS


🗂️ Review Sessions — click to expand
🚦 Gate — Test Before & After Fix

Gate Result: ✅ PASSED

Platform: IOS · Base: main · Merge base: 5a7d8cba

Test Without Fix (expect FAIL) With Fix (expect PASS)
🖥️ Issue35902 Issue35902 ✅ FAIL — 340s ✅ PASS — 124s
🔴 Without fix — 🖥️ Issue35902: FAIL ✅ · 340s
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 684 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 456 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 5.86 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Foldable/src/Controls.Foldable.csproj (in 5.03 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/maps/src/Maps.csproj (in 6.24 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj (in 6.25 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 6.24 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 6.26 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 6.25 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 6.26 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 6.27 sec).
/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0-ios26.0/Microsoft.Maui.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Maps.dll
  Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Controls.Foldable -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Foldable.dll
  Controls.Xaml -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Xaml.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Microsoft.AspNetCore.Components.WebView.Maui -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Microsoft.AspNetCore.Components.WebView.Maui/Debug/net10.0-ios26.0/Microsoft.AspNetCore.Components.WebView.Maui.dll
  Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
  Detected signing identity:
    Code Signing Key: "" (-)
    Provisioning Profile: "" () - no entitlements
    Bundle Id: com.microsoft.maui.uitests
    App Id: com.microsoft.maui.uitests
  Controls.TestCases.HostApp -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-ios/iossimulator-arm64/Controls.TestCases.HostApp.dll
  Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
  Optimizing assemblies for size. This process might take a while.

Build succeeded.

/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
    1 Warning(s)
    0 Error(s)

Time Elapsed 00:03:03.52
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/CustomAttributes/Controls.CustomAttributes.csproj (in 799 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 799 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/VisualTestUtils/VisualTestUtils.csproj (in 799 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 819 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 829 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Core/UITest.Core.csproj (in 2 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 900 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 311 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.NUnit/UITest.NUnit.csproj (in 1.66 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Appium/UITest.Appium.csproj (in 3.8 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Analyzers/UITest.Analyzers.csproj (in 3.71 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/VisualTestUtils.MagickNet/VisualTestUtils.MagickNet.csproj (in 5.77 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.iOS.Tests/Controls.TestCases.iOS.Tests.csproj (in 6.65 sec).
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Controls.CustomAttributes -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.CustomAttributes/Debug/net10.0/Controls.CustomAttributes.dll
  Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0/Microsoft.Maui.dll
  Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
  UITest.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
  VisualTestUtils -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
  UITest.NUnit -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
  VisualTestUtils.MagickNet -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
  UITest.Appium -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
  UITest.Analyzers -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
  Controls.TestCases.iOS.Tests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
Test run for /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (arm64)

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.07]   Discovering: Controls.TestCases.iOS.Tests
[xUnit.net 00:00:00.21]   Discovered:  Controls.TestCases.iOS.Tests
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
   NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 6/22/2026 7:57:02 AM FixtureSetup for Issue35902(iOS)
>>>>> 6/22/2026 7:57:07 AM TransparentShellNavBarShouldRemainTransparentAfterKeyboardDismiss Start
>>>>> 6/22/2026 7:57:16 AM TransparentShellNavBarShouldRemainTransparentAfterKeyboardDismiss Stop
>>>>> 6/22/2026 7:57:16 AM Log types: syslog, crashlog, performance, safariConsole, safariNetwork, server
  Failed TransparentShellNavBarShouldRemainTransparentAfterKeyboardDismiss [9 s]
  Error Message:
   VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: TransparentShellNavBarShouldRemainTransparentAfterKeyboardDismiss.png (7.51% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow

  Stack Trace:
     at VisualTestUtils.VisualRegressionTester.Fail(String message) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 162
   at VisualTestUtils.VisualRegressionTester.VerifyMatchesSnapshot(String name, ImageSnapshot actualImage, String environmentName, ITestContext testContext) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 123
   at Microsoft.Maui.TestCases.Tests.UITest.<VerifyScreenshot>g__Verify|13_0(String name, <>c__DisplayClass13_0&) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 477
   at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 309
   at Microsoft.Maui.TestCases.Tests.Issues.Issue35902.TransparentShellNavBarShouldRemainTransparentAfterKeyboardDismiss() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35902.cs:line 24
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)

NUnit Adapter 4.5.0.0: Test execution complete
Results File: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue35902.trx

Total tests: 1
Test Run Failed.
     Failed: 1
 Total time: 1.6406 Minutes
>>> TRX_RESULT_FILE: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue35902.trx

🟢 With fix — 🖥️ Issue35902: PASS ✅ · 124s
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 411 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 428 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 378 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 482 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 444 ms).
  6 of 11 projects are up-to-date for restore.
/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0-ios26.0/Microsoft.Maui.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Maps.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Controls.Foldable -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Foldable.dll
  Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
  Controls.Xaml -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Xaml.dll
  Microsoft.AspNetCore.Components.WebView.Maui -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Microsoft.AspNetCore.Components.WebView.Maui/Debug/net10.0-ios26.0/Microsoft.AspNetCore.Components.WebView.Maui.dll
  Detected signing identity:
    Code Signing Key: "" (-)
    Provisioning Profile: "" () - no entitlements
    Bundle Id: com.microsoft.maui.uitests
    App Id: com.microsoft.maui.uitests
  Controls.TestCases.HostApp -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-ios/iossimulator-arm64/Controls.TestCases.HostApp.dll
  Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
  Optimizing assemblies for size. This process might take a while.

Build succeeded.

/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
    1 Warning(s)
    0 Error(s)

Time Elapsed 00:01:01.87
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 401 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 369 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 420 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 436 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 459 ms).
  8 of 13 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
  Controls.CustomAttributes -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.CustomAttributes/Debug/net10.0/Controls.CustomAttributes.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0/Microsoft.Maui.dll
  Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.90-ci+azdo.14446263
  Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
  VisualTestUtils -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
  UITest.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
  VisualTestUtils.MagickNet -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
  UITest.NUnit -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
  UITest.Appium -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
  UITest.Analyzers -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
  Controls.TestCases.iOS.Tests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
Test run for /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (arm64)

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.05]   Discovering: Controls.TestCases.iOS.Tests
[xUnit.net 00:00:00.19]   Discovered:  Controls.TestCases.iOS.Tests
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
   NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 6/22/2026 7:59:12 AM FixtureSetup for Issue35902(iOS)
>>>>> 6/22/2026 7:59:17 AM TransparentShellNavBarShouldRemainTransparentAfterKeyboardDismiss Start
>>>>> 6/22/2026 7:59:21 AM TransparentShellNavBarShouldRemainTransparentAfterKeyboardDismiss Stop
  Passed TransparentShellNavBarShouldRemainTransparentAfterKeyboardDismiss [4 s]
NUnit Adapter 4.5.0.0: Test execution complete
Results File: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue35902.trx

Test Run Successful.
Total tests: 1
     Passed: 1
 Total time: 27.6001 Seconds
>>> TRX_RESULT_FILE: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue35902.trx

📁 Fix files reverted (1 files)
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs

📋 Pre-Flight — Context & Validation

Issue: #35902 - [iOS] Transparent Shell Navigation Bar Breaks After Keyboard Interaction on Secondary Pages
PR: #35960 - [iOS] Fix transparent Shell navigation bar appearing opaque after keyboard dismiss
Platforms Affected: iOS
Files Changed: 1 implementation, 4 test

Key Findings

  • Issue #35902 is an iOS Shell regression where transparent Shell navigation bars become visually opaque after keyboard/picker dismissal on a secondary page.
  • PR #35960 changes ShellPageRendererTracker.OnKeyboardWillHide to skip frame adjustment when the native nav bar is translucent and the current page frame is already at Y=0.
  • The PR adds an iOS Shell UI test and screenshot baselines for the transparent nav-bar-after-keyboard scenario.
  • Public inline review context includes prior MauiBot errors about not clearing _pendingKeyboardNavigation on the new early return and a screenshot mismatch concern; the fixture concern about Shell.BackgroundColor has been fixed.
  • GitHub CLI is unauthenticated in this environment, so PR metadata/comments were fetched through public REST API and CI required-check status could not be queried with gh pr checks.

Code Review Summary

Verdict: NEEDS_CHANGES
Confidence: low
Errors: 2 | Warnings: 1 | Suggestions: 0

Key code review findings:

  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs:1249-1250 — the transparent-nav early return exits before clearing one-shot _pendingKeyboardNavigation.
  • src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35902.cs:24 — prior gate/inline evidence reported the screenshot test red on the PR head; this run was told gate has already passed, so gate was not re-run.
  • ⚠️ src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs:1249 — using navBar.Translucent as the transparent-Shell signal may be timing-sensitive during keyboard/navigation lifecycle.

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #35960 Skip keyboard-hide frame correction when navBar.Translucent && currentFrame.Y == 0; add iOS Shell screenshot test. ✅ PASSED (Gate provided) ShellPageRendererTracker.cs, Issue35902.cs, screenshots Original PR; gate was completed before this run and was not re-run.

🔬 Code Review — Deep Analysis

Code Review — PR #35960

Independent Assessment

What this changes: Adds an iOS Shell keyboard-hide guard so transparent/translucent navigation bars keep content at Y=0, plus an iOS screenshot regression test.

Inferred motivation: Avoid undoing intentional transparent Shell layout after keyboard dismissal on secondary pages.

Reconciliation with PR Narrative

Author claims: navBar.Translucent reliably identifies transparent Shell nav bars and preserves the original opaque-navbar fix.
Agreement/disagreement: The motivation matches the code, but the guard introduces an unresolved one-shot state bug and the regression test has prior gate evidence of still failing.

Prior Review Reconciliation

Prior ❌ Error Finding Source Status Evidence
Transparent-nav early return does not clear _pendingKeyboardNavigation MauiBot inline review ❌ Unresolved Current PR head still returns at ShellPageRendererTracker.cs:1250 before _pendingKeyboardNavigation = false at method end.
Screenshot regression still fails with fix applied (~0.72% mismatch) MauiBot gate/inline review ❌ Unresolved No later commit after e0d5af201e; test still uses plain VerifyScreenshot() at Issue35902.cs:24.
Test fixture used wrong Shell background property MauiBot inline review ✅ Fixed Current fixture uses Shell.SetBackgroundColor(this, Colors.Transparent) at Issue35902.cs:8.

Blast Radius Assessment

  • Runs for all instances: Yes — UIKeyboard.Notifications.ObserveWillHide is global per tracker.
  • Startup impact: Medium — _pendingKeyboardNavigation is armed from OnPageLoaded.
  • Static/shared state: No static state, but per-tracker state can remain stale.

CI Status

  • Required-check result: gh pr checks --required unavailable (gh auth login required). REST fallback for head e0d5af201e shows failures: Build Analysis, maui-pr, and maui-pr (Run Helix Unit Tests Windows Helix Unit Tests (Debug)).
  • Classification: Undetermined/partly PR-related; prior gate explicitly reports Issue35902 still fails with the fix.
  • Action taken: CI confidence capped low. Gate result provided to this run says tests fail without fix and pass with fix, so gate was not re-run.

Findings

❌ Error — _pendingKeyboardNavigation remains armed on transparent-nav early return

src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs:1249-1250

The new transparent-nav guard returns before the one-shot _pendingKeyboardNavigation flag is cleared at line 1275. For transparent Shell pages, this can leave the tracker armed for later unrelated keyboard hides, re-entering the frame-correction path outside the intended page-load/navigation window. Clear the flag before returning, or restructure with a consumed-once path.

❌ Error — Regression test is still reported red

src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35902.cs:24

Prior gate evidence on the current head reports the new screenshot test still fails after the fix with a stable image delta. Since no newer commit changes the test/baseline, this remains unresolved. The PR should align the baseline/fixed rendering or use a narrowly justified tolerance/retry that still catches the broken state.

⚠️ Warning — navBar.Translucent may be a timing-sensitive proxy

src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs:1249

The PR relies on the native UINavigationBar.Translucent value during the same early page-load/keyboard timing window this code is trying to fix. If the native appearance has not yet been updated for an opaque Shell, the guard could suppress the original correction. Querying MAUI Shell appearance state directly would be less timing-sensitive.

Failure-Mode Probing

  • Keyboard dismissed twice on the same transparent page: first dismiss returns early and leaves _pendingKeyboardNavigation true; later dismiss still enters the handler.
  • Shell appearance changes from transparent to opaque after first dismiss: stale armed flag may allow correction on a later unrelated keyboard hide.
  • SearchHandler active: existing early return also skips clearing on main; related inflight fix shows this pattern needs explicit handling.
  • Null/disconnected tracker: existing _disposed, ViewController?.View, and NavigationController guards prevent obvious null dereferences.

Verdict: NEEDS_CHANGES

Confidence: low — platform Shell/keyboard lifecycle code plus CI/required-check status is not cleanly verified.
Summary: The PR addresses a real bug, but the new early return leaves one-shot keyboard state stale, and prior gate evidence says the added regression remains red on the current head. These should be fixed before merge.


🛠️ Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix-1 Effective Shell Toolbar Background Guard: clear _pendingKeyboardNavigation before later early returns and use MAUI toolbar background state instead of native nav-bar translucency. ❌ FAIL 1 file Failed to compile because Shell.Toolbar.BarBackground is a Brush, not a Color, so .Alpha is unavailable.
2 try-fix-2 Logical Shell Appearance Guard: clear _pendingKeyboardNavigation once, then resolve effective Shell.BackgroundColorProperty from the current page/Shell hierarchy to decide whether Y=0 is intentional. ✅ PASS 1 file Passed TransparentShellNavBarShouldRemainTransparentAfterKeyboardDismiss on iOS simulator. More robust than PR because it avoids timing-sensitive native navBar.Translucent and consumes one-shot pending state.
PR PR #35960 Skip keyboard-hide frame correction when navBar.Translucent && currentFrame.Y == 0; add iOS Shell screenshot test. ✅ PASSED (Gate) 5 files Original PR. Pre-flight review found the new early return does not clear _pendingKeyboardNavigation.

Cross-Pollination

Model Round New Ideas? Details
gpt-5.5 / maui-expert-reviewer 1 Yes Suggested using MAUI Shell appearance intent instead of native navBar.Translucent; initial toolbar-state variant failed because BarBackground is a Brush.
gpt-5.5 / maui-expert-reviewer 2 Yes Refined the idea to walk Shell attached-property hierarchy for effective Shell.BackgroundColorProperty, preserving Shell appearance precedence for pushed pages. This passed.

Exhausted: No — stopped because Candidate #2 passed the targeted iOS regression test and is demonstrably better than the PR's current fix.
Selected Fix: Candidate #2 — It passes the iOS regression test, clears _pendingKeyboardNavigation before every post-pending early return, and avoids using native UINavigationBar.Translucent as a timing-sensitive proxy for MAUI Shell appearance intent.


📝 Recommended PR Title & Description

Assessment: ✏️ Recommend updating — the current metadata accurately describes the raw PR, but the winning fix changes the implementation from a native navBar.Translucent guard to Shell appearance-intent detection and clears _pendingKeyboardNavigation earlier.

Recommended title

[iOS] Shell: Keep transparent navigation bar after keyboard dismiss

Recommended description

### Issue Details
On iOS, when Shell.BackgroundColor="Transparent", navigating to a secondary page correctly shows the nav bar as transparent. After tapping an Entry and dismissing the keyboard, the navigation bar incorrectly appears with a solid opaque background, hiding the page color beneath it.

### Root Cause
PR #33958 added an OnKeyboardWillHide handler in ShellPageRendererTracker to fix issue #33547, which repositions the page frame from Y=0 to Y=navBarBottom whenever the keyboard closes. For transparent Shell, Y=0 is intentional (page content extends behind the bar), but the handler moved the frame unconditionally, pulling content out from under the transparent nav bar and making it appear opaque.

### Description of Change
The keyboard-hide handler now consumes the one-shot _pendingKeyboardNavigation flag when the keyboard-hide event is considered, then skips frame adjustment when the current page is intentionally positioned at Y=0 for transparent Shell chrome. The transparent-chrome check is based on the effective Shell.BackgroundColorProperty resolved from the current page/Shell hierarchy, including ShellSection.CurrentItem, instead of relying on native UINavigationBar.Translucent timing.

The original #33547 fix is preserved for opaque navigation bars: pages that are incorrectly left at Y=0 after keyboard dismissal are still moved below the navigation bar.

Validated the behavior in the following platforms
 
- [ ] Android
- [ ] Windows
- [x] iOS
- [ ] Mac
 
### Issues Fixed
  
Fixes #35902 

### Output  ScreenShot

|Before|After|
|--|--|
| <video src="https://github.com/user-attachments/assets/98d6eb82-3fc9-4328-b871-4a4762efcdb3" >| <video src="https://github.com/user-attachments/assets/cb958d3b-8551-4b9e-904d-395123d2d8bb">|

🏁 Report — Final Recommendation

Comparative Report — PR #35960

Candidates compared

Rank Candidate Regression result Assessment
1 try-fix-2 ✅ PASS Best fix. It clears _pendingKeyboardNavigation before post-pending early returns and uses MAUI Shell appearance intent (Shell.BackgroundColorProperty resolved through the current page hierarchy) instead of timing-sensitive native UINavigationBar.Translucent.
2 pr-plus-reviewer ✅ Inherits PR gate evidence; not separately run Good incremental PR improvement. It fixes the stale _pendingKeyboardNavigation issue while preserving the PR's transparent-nav behavior, but still relies on native nav-bar translucency as a proxy for Shell intent.
3 pr ✅ PASSED gate Fixes the reported regression and includes useful iOS UI coverage, but leaves _pendingKeyboardNavigation set on the new transparent-nav early return.
4 try-fix-1 ❌ FAIL Must rank below passing candidates. It failed to compile because Shell.Toolbar.BarBackground is a Brush, not a Color, so .Alpha is invalid.

Analysis

The raw PR correctly identifies that Y=0 is intentional for transparent Shell navigation bars and the supplied gate result confirms the regression test fails without the fix and passes with the fix. However, the new early return exits before clearing _pendingKeyboardNavigation, extending a one-shot page-load workaround beyond its intended keyboard-hide event.

pr-plus-reviewer addresses that concrete expert-review issue by consuming _pendingKeyboardNavigation as soon as the method enters the pending keyboard-navigation path. This makes the PR fix safer without changing its visible behavior. Its remaining weakness is that navBar.Translucent is native state and may be less reliable as the source of truth than MAUI's Shell appearance properties.

try-fix-2 is the strongest candidate because it combines the state-lifecycle correction with a more semantically direct transparent-chrome test. It mirrors Shell appearance precedence by walking the page/Shell hierarchy and checking the effective Shell.BackgroundColorProperty, including the ShellSection.CurrentItem case used by Shell's own appearance resolution for pushed pages. It passed the targeted iOS regression test. try-fix-1 is disqualified from serious consideration because it failed compilation.

Winning candidate

Winner: try-fix-2

try-fix-2 wins because it is a passing candidate and provides the most robust root-cause fix: it preserves transparent Shell content placement, consumes the one-shot pending flag, and bases the transparent decision on MAUI Shell appearance intent rather than potentially timing-sensitive native nav-bar state.


🧭 Next Steps — alternative fix proposed (try-fix-2)

Automated review — alternative fix proposed

The expert-reviewer evaluation compared the PR fix against automatically generated candidates and selected try-fix-2 as the strongest fix.

Why: try-fix-2 won because it passed the targeted iOS regression test while fixing the PR's stale _pendingKeyboardNavigation issue and using MAUI Shell appearance intent instead of native UINavigationBar.Translucent as the transparent-chrome signal.

Please consider applying the candidate diff below (or use it as guidance). Once you push an update, this workflow will re-trigger and re-evaluate.

Candidate diff (try-fix-2)
diff --git a/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs b/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs
index 28ad67a703..c4a143faec 100644
--- a/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs
+++ b/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs
@@ -1237,6 +1237,8 @@ namespace Microsoft.Maui.Controls.Platform.Compatibility
 			if (!_pendingKeyboardNavigation)
 				return;
 
+			_pendingKeyboardNavigation = false;
+
 			var navController = ViewController.NavigationController;
 			var navBar = navController.NavigationBar;
 
@@ -1245,8 +1247,8 @@ namespace Microsoft.Maui.Controls.Platform.Compatibility
 
 			var currentFrame = ViewController.View.Frame;
 
-			// Skip frame adjustment for transparent Shell nav bar where Y=0 is intentional (content extends behind bar).
-			if (navBar.Translucent && currentFrame.Y == 0)
+			// Skip frame adjustment for transparent Shell chrome where Y=0 is intentional (content extends behind bar).
+			if (currentFrame.Y == 0 && IsShellChromeBackgroundTransparent(Page))
 				return;
 
 			// Don't interfere with SearchHandler's keyboard management when it's active
@@ -1270,9 +1272,26 @@ namespace Microsoft.Maui.Controls.Platform.Compatibility
 
 				ViewController.View.Frame = correctFrame;
 			}
+		}
 
-			// Clear flag after handling keyboard dismissal once
-			_pendingKeyboardNavigation = false;
+		static bool IsShellChromeBackgroundTransparent(Element? element)
+		{
+			while (element is not null && !Application.IsApplicationOrWindowOrNull(element))
+			{
+				if (element.IsSet(Shell.BackgroundColorProperty))
+					return Shell.GetBackgroundColor(element)?.Alpha < 1.0f;
+
+				if (element is ShellSection shellSection &&
+					shellSection.CurrentItem is not null &&
+					shellSection.CurrentItem.IsSet(Shell.BackgroundColorProperty))
+				{
+					return Shell.GetBackgroundColor(shellSection.CurrentItem)?.Alpha < 1.0f;
+				}
+
+				element = element.Parent;
+			}
+
+			return false;
 		}
 
 		#endregion SearchHandler

@MauiBot MauiBot removed the s/agent-review-in-progress AI review is currently running for this PR label Jun 22, 2026
@kubaflo
kubaflo changed the base branch from main to inflight/current June 22, 2026 19:47

@kubaflo kubaflo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Could you please resolve conflicts?

@Shalini-Ashokan

Copy link
Copy Markdown
Contributor Author

Could you please resolve conflicts?

@kubaflo, I have resolved the conflicts.

@kubaflo
kubaflo merged commit f7c9bda into dotnet:inflight/current Jun 24, 2026
7 of 12 checks passed
@github-actions github-actions Bot added this to the .NET 10 SR9 milestone Jun 24, 2026
kubaflo pushed a commit that referenced this pull request Jun 25, 2026
…board dismiss (#35960)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->


### Issue Details
On iOS, when Shell.BackgroundColor="Transparent", navigating to a
secondary page correctly shows the nav bar as transparent. After tapping
an Entry and dismissing the keyboard, the navigation bar incorrectly
appears with a solid opaque background, hiding the page color beneath
it.

### Root Cause
PR #33958 added an OnKeyboardWillHide handler in
ShellPageRendererTracker to fix issue #33547, which repositions the page
frame from Y=0 to Y=navBarBottom whenever the keyboard closes. For
transparent Shell, Y=0 is intentional (page content extends behind the
bar), but the handler moved the frame unconditionally, pulling content
out from under the transparent nav bar and making it appear opaque.

### Description of Change
A guard was added inside OnKeyboardWillHide to skip the frame adjustment
when the navigation bar is transparent, since the page content at Y=0 is
intentional in that case. The guard checks navBar.Translucent, which
MAUI already sets to true for transparent Shell making it a reliable
signal. The original #33547 fix is fully preserved for opaque navigation
bars

Validated the behavior in the following platforms
 
- [ ] Android
- [ ] Windows
- [x] iOS
- [ ] Mac
 
### Issues Fixed
  
Fixes #35902 

### Output  ScreenShot

|Before|After|
|--|--|
| <video
src="https://github.com/user-attachments/assets/98d6eb82-3fc9-4328-b871-4a4762efcdb3"
>| <video
src="https://github.com/user-attachments/assets/cb958d3b-8551-4b9e-904d-395123d2d8bb">|
kubaflo pushed a commit that referenced this pull request Jul 3, 2026
…board dismiss (#35960)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->


### Issue Details
On iOS, when Shell.BackgroundColor="Transparent", navigating to a
secondary page correctly shows the nav bar as transparent. After tapping
an Entry and dismissing the keyboard, the navigation bar incorrectly
appears with a solid opaque background, hiding the page color beneath
it.

### Root Cause
PR #33958 added an OnKeyboardWillHide handler in
ShellPageRendererTracker to fix issue #33547, which repositions the page
frame from Y=0 to Y=navBarBottom whenever the keyboard closes. For
transparent Shell, Y=0 is intentional (page content extends behind the
bar), but the handler moved the frame unconditionally, pulling content
out from under the transparent nav bar and making it appear opaque.

### Description of Change
A guard was added inside OnKeyboardWillHide to skip the frame adjustment
when the navigation bar is transparent, since the page content at Y=0 is
intentional in that case. The guard checks navBar.Translucent, which
MAUI already sets to true for transparent Shell making it a reliable
signal. The original #33547 fix is fully preserved for opaque navigation
bars

Validated the behavior in the following platforms
 
- [ ] Android
- [ ] Windows
- [x] iOS
- [ ] Mac
 
### Issues Fixed
  
Fixes #35902 

### Output  ScreenShot

|Before|After|
|--|--|
| <video
src="https://github.com/user-attachments/assets/98d6eb82-3fc9-4328-b871-4a4762efcdb3"
>| <video
src="https://github.com/user-attachments/assets/cb958d3b-8551-4b9e-904d-395123d2d8bb">|
@kubaflo kubaflo mentioned this pull request Jul 6, 2026
kubaflo pushed a commit that referenced this pull request Jul 6, 2026
…board dismiss (#35960)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->


### Issue Details
On iOS, when Shell.BackgroundColor="Transparent", navigating to a
secondary page correctly shows the nav bar as transparent. After tapping
an Entry and dismissing the keyboard, the navigation bar incorrectly
appears with a solid opaque background, hiding the page color beneath
it.

### Root Cause
PR #33958 added an OnKeyboardWillHide handler in
ShellPageRendererTracker to fix issue #33547, which repositions the page
frame from Y=0 to Y=navBarBottom whenever the keyboard closes. For
transparent Shell, Y=0 is intentional (page content extends behind the
bar), but the handler moved the frame unconditionally, pulling content
out from under the transparent nav bar and making it appear opaque.

### Description of Change
A guard was added inside OnKeyboardWillHide to skip the frame adjustment
when the navigation bar is transparent, since the page content at Y=0 is
intentional in that case. The guard checks navBar.Translucent, which
MAUI already sets to true for transparent Shell making it a reliable
signal. The original #33547 fix is fully preserved for opaque navigation
bars

Validated the behavior in the following platforms
 
- [ ] Android
- [ ] Windows
- [x] iOS
- [ ] Mac
 
### Issues Fixed
  
Fixes #35902 

### Output  ScreenShot

|Before|After|
|--|--|
| <video
src="https://github.com/user-attachments/assets/98d6eb82-3fc9-4328-b871-4a4762efcdb3"
>| <video
src="https://github.com/user-attachments/assets/cb958d3b-8551-4b9e-904d-395123d2d8bb">|
PureWeen pushed a commit that referenced this pull request Jul 7, 2026
…board dismiss (#35960)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->


### Issue Details
On iOS, when Shell.BackgroundColor="Transparent", navigating to a
secondary page correctly shows the nav bar as transparent. After tapping
an Entry and dismissing the keyboard, the navigation bar incorrectly
appears with a solid opaque background, hiding the page color beneath
it.

### Root Cause
PR #33958 added an OnKeyboardWillHide handler in
ShellPageRendererTracker to fix issue #33547, which repositions the page
frame from Y=0 to Y=navBarBottom whenever the keyboard closes. For
transparent Shell, Y=0 is intentional (page content extends behind the
bar), but the handler moved the frame unconditionally, pulling content
out from under the transparent nav bar and making it appear opaque.

### Description of Change
A guard was added inside OnKeyboardWillHide to skip the frame adjustment
when the navigation bar is transparent, since the page content at Y=0 is
intentional in that case. The guard checks navBar.Translucent, which
MAUI already sets to true for transparent Shell making it a reliable
signal. The original #33547 fix is fully preserved for opaque navigation
bars

Validated the behavior in the following platforms
 
- [ ] Android
- [ ] Windows
- [x] iOS
- [ ] Mac
 
### Issues Fixed
  
Fixes #35902 

### Output  ScreenShot

|Before|After|
|--|--|
| <video
src="https://github.com/user-attachments/assets/98d6eb82-3fc9-4328-b871-4a4762efcdb3"
>| <video
src="https://github.com/user-attachments/assets/cb958d3b-8551-4b9e-904d-395123d2d8bb">|
PureWeen pushed a commit that referenced this pull request Jul 7, 2026
…board dismiss (#35960)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->


### Issue Details
On iOS, when Shell.BackgroundColor="Transparent", navigating to a
secondary page correctly shows the nav bar as transparent. After tapping
an Entry and dismissing the keyboard, the navigation bar incorrectly
appears with a solid opaque background, hiding the page color beneath
it.

### Root Cause
PR #33958 added an OnKeyboardWillHide handler in
ShellPageRendererTracker to fix issue #33547, which repositions the page
frame from Y=0 to Y=navBarBottom whenever the keyboard closes. For
transparent Shell, Y=0 is intentional (page content extends behind the
bar), but the handler moved the frame unconditionally, pulling content
out from under the transparent nav bar and making it appear opaque.

### Description of Change
A guard was added inside OnKeyboardWillHide to skip the frame adjustment
when the navigation bar is transparent, since the page content at Y=0 is
intentional in that case. The guard checks navBar.Translucent, which
MAUI already sets to true for transparent Shell making it a reliable
signal. The original #33547 fix is fully preserved for opaque navigation
bars

Validated the behavior in the following platforms
 
- [ ] Android
- [ ] Windows
- [x] iOS
- [ ] Mac
 
### Issues Fixed
  
Fixes #35902 

### Output  ScreenShot

|Before|After|
|--|--|
| <video
src="https://github.com/user-attachments/assets/98d6eb82-3fc9-4328-b871-4a4762efcdb3"
>| <video
src="https://github.com/user-attachments/assets/cb958d3b-8551-4b9e-904d-395123d2d8bb">|
kubaflo pushed a commit that referenced this pull request Jul 10, 2026
…board dismiss (#35960)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->


### Issue Details
On iOS, when Shell.BackgroundColor="Transparent", navigating to a
secondary page correctly shows the nav bar as transparent. After tapping
an Entry and dismissing the keyboard, the navigation bar incorrectly
appears with a solid opaque background, hiding the page color beneath
it.

### Root Cause
PR #33958 added an OnKeyboardWillHide handler in
ShellPageRendererTracker to fix issue #33547, which repositions the page
frame from Y=0 to Y=navBarBottom whenever the keyboard closes. For
transparent Shell, Y=0 is intentional (page content extends behind the
bar), but the handler moved the frame unconditionally, pulling content
out from under the transparent nav bar and making it appear opaque.

### Description of Change
A guard was added inside OnKeyboardWillHide to skip the frame adjustment
when the navigation bar is transparent, since the page content at Y=0 is
intentional in that case. The guard checks navBar.Translucent, which
MAUI already sets to true for transparent Shell making it a reliable
signal. The original #33547 fix is fully preserved for opaque navigation
bars

Validated the behavior in the following platforms
 
- [ ] Android
- [ ] Windows
- [x] iOS
- [ ] Mac
 
### Issues Fixed
  
Fixes #35902 

### Output  ScreenShot

|Before|After|
|--|--|
| <video
src="https://github.com/user-attachments/assets/98d6eb82-3fc9-4328-b871-4a4762efcdb3"
>| <video
src="https://github.com/user-attachments/assets/cb958d3b-8551-4b9e-904d-395123d2d8bb">|
kubaflo pushed a commit that referenced this pull request Jul 15, 2026
…board dismiss (#35960)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->


### Issue Details
On iOS, when Shell.BackgroundColor="Transparent", navigating to a
secondary page correctly shows the nav bar as transparent. After tapping
an Entry and dismissing the keyboard, the navigation bar incorrectly
appears with a solid opaque background, hiding the page color beneath
it.

### Root Cause
PR #33958 added an OnKeyboardWillHide handler in
ShellPageRendererTracker to fix issue #33547, which repositions the page
frame from Y=0 to Y=navBarBottom whenever the keyboard closes. For
transparent Shell, Y=0 is intentional (page content extends behind the
bar), but the handler moved the frame unconditionally, pulling content
out from under the transparent nav bar and making it appear opaque.

### Description of Change
A guard was added inside OnKeyboardWillHide to skip the frame adjustment
when the navigation bar is transparent, since the page content at Y=0 is
intentional in that case. The guard checks navBar.Translucent, which
MAUI already sets to true for transparent Shell making it a reliable
signal. The original #33547 fix is fully preserved for opaque navigation
bars

Validated the behavior in the following platforms
 
- [ ] Android
- [ ] Windows
- [x] iOS
- [ ] Mac
 
### Issues Fixed
  
Fixes #35902 

### Output  ScreenShot

|Before|After|
|--|--|
| <video
src="https://github.com/user-attachments/assets/98d6eb82-3fc9-4328-b871-4a4762efcdb3"
>| <video
src="https://github.com/user-attachments/assets/cb958d3b-8551-4b9e-904d-395123d2d8bb">|
kubaflo pushed a commit that referenced this pull request Jul 22, 2026
…board dismiss (#35960)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->


### Issue Details
On iOS, when Shell.BackgroundColor="Transparent", navigating to a
secondary page correctly shows the nav bar as transparent. After tapping
an Entry and dismissing the keyboard, the navigation bar incorrectly
appears with a solid opaque background, hiding the page color beneath
it.

### Root Cause
PR #33958 added an OnKeyboardWillHide handler in
ShellPageRendererTracker to fix issue #33547, which repositions the page
frame from Y=0 to Y=navBarBottom whenever the keyboard closes. For
transparent Shell, Y=0 is intentional (page content extends behind the
bar), but the handler moved the frame unconditionally, pulling content
out from under the transparent nav bar and making it appear opaque.

### Description of Change
A guard was added inside OnKeyboardWillHide to skip the frame adjustment
when the navigation bar is transparent, since the page content at Y=0 is
intentional in that case. The guard checks navBar.Translucent, which
MAUI already sets to true for transparent Shell making it a reliable
signal. The original #33547 fix is fully preserved for opaque navigation
bars

Validated the behavior in the following platforms
 
- [ ] Android
- [ ] Windows
- [x] iOS
- [ ] Mac
 
### Issues Fixed
  
Fixes #35902 

### Output  ScreenShot

|Before|After|
|--|--|
| <video
src="https://github.com/user-attachments/assets/98d6eb82-3fc9-4328-b871-4a4762efcdb3"
>| <video
src="https://github.com/user-attachments/assets/cb958d3b-8551-4b9e-904d-395123d2d8bb">|
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 25, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-controls-shell Shell Navigation, Routes, Tabs, Flyout partner/syncfusion Issues / PR's with Syncfusion collaboration platform/ios s/agent-fix-win AI found a better alternative fix than the PR s/agent-gate-passed AI verified tests catch the bug (fail without fix, pass with fix) s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[iOS] Transparent Shell Navigation Bar Breaks After Keyboard Interaction on Secondary Pages

5 participants