[iOS] Fix transparent Shell navigation bar appearing opaque after keyboard dismiss - #35960
Conversation
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35960Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35960" |
|
/review -b feature/enhanced-reviewer -p ios |
kubaflo
left a comment
There was a problem hiding this comment.
Could you try the ai's suggestions?
|
/azp run maui-pr-uitests |
|
Azure Pipelines successfully started running 1 pipeline(s). |
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. |
This comment has been minimized.
This comment has been minimized.
|
/review tests |
This comment has been minimized.
This comment has been minimized.
Tests Failure Analysis
Test Failure Review: No failures found - click to expandOverall verdict: No failures found All GitHub check runs for this PR completed successfully. The
Recommended actionNo test-failure action is needed. All CI checks passed for commit Evidence details
|
kubaflo
left a comment
There was a problem hiding this comment.
Could you check the ai's suggestions?
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 2 findings
See inline comments for details.
kubaflo
left a comment
There was a problem hiding this comment.
Tests are failing - could you please verify
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
MauiBot
left a comment
There was a problem hiding this comment.
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.
🗂️ 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.OnKeyboardWillHideto skip frame adjustment when the native nav bar is translucent and the current page frame is already atY=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
_pendingKeyboardNavigationon the new early return and a screenshot mismatch concern; the fixture concern aboutShell.BackgroundColorhas 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— usingnavBar.Translucentas 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.ObserveWillHideis global per tracker. - Startup impact: Medium —
_pendingKeyboardNavigationis armed fromOnPageLoaded. - Static/shared state: No static state, but per-tracker state can remain stale.
CI Status
- Required-check result:
gh pr checks --requiredunavailable (gh auth loginrequired). REST fallback for heade0d5af201eshows failures:Build Analysis,maui-pr, andmaui-pr (Run Helix Unit Tests Windows Helix Unit Tests (Debug)). - Classification: Undetermined/partly PR-related; prior gate explicitly reports
Issue35902still 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
_pendingKeyboardNavigationtrue; 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, andNavigationControllerguards 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
kubaflo
left a comment
There was a problem hiding this comment.
Could you please resolve conflicts?
e0d5af2 to
aa21233
Compare
@kubaflo, I have resolved the conflicts. |
…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">|
…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">|
…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">|
…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">|
…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">|
…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">|
…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">|
…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">|
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
Issues Fixed
Fixes #35902
Output ScreenShot
35092-BeforeFix.mov
35092-AfterFix.mov