Skip to content

Fix iOS SearchHandler suggestions list gap on iPhone#32931

Open
Copilot wants to merge 4 commits into
mainfrom
copilot/fix-searchhandler-suggestions-gap
Open

Fix iOS SearchHandler suggestions list gap on iPhone#32931
Copilot wants to merge 4 commits into
mainfrom
copilot/fix-searchhandler-suggestions-gap

Conversation

Copilot AI commented Dec 1, 2025

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!

Description of Change

On iPhone, when tapping a SearchHandler, the navigation bar hides and the search bar animates upward. The suggestions list was not following this movement, creating a visible gap. iPad and Android work correctly.

Root cause: When HidesNavigationBarDuringPresentation is true (the iOS default), the navigation bar hides during search presentation and the search bar animates upward, but the suggestions list doesn't follow properly on iPhone.

Fix: Set HidesNavigationBarDuringPresentation = false and ObscuresBackgroundDuringPresentation = false on the UISearchController when it's created in ShellPageRendererTracker.AttachSearchController(). This prevents the navigation bar from hiding during search presentation, keeping the suggestions list correctly attached to the search bar.

_searchController.HidesNavigationBarDuringPresentation = false;
_searchController.ObscuresBackgroundDuringPresentation = false;

This approach is based on a working workaround provided by @pictos in the issue comments.

Issues Fixed

Fixes #32930

Original prompt

This section details on the original issue you should resolve

<issue_title>[iOS] SearchHandler suggestions list does not follow the search bar upward movement on iPhone, creating a layout gap</issue_title>
<issue_description>### Description

I have encountered a UI layout issue when using SearchHandler within a Shell page on iOS (.NET 9/10).

Steps to Reproduce

Current Behavior:
When tapping the search box to focus:
The navigation bar title hides.
The search bar animates/floats upwards as expected.
However, the suggestions drop-down list does not follow the search bar's upward movement. It seems to remain anchored to its original position (before the search bar moved).
Result:
This creates a visible gap between the search bar and the suggestions list, revealing the underlying UI content in between.
Platform Specifics:
iPhone: Issue reproduces (Bug).
iPad: Works correctly (suggestions list stays attached to the search bar).
Android: Works correctly.
Environment
.NET MAUI Version: .NET 9 / .NET 10
Platform: iOS (iPhone only)

Link to public reproduction project repository

No response

Version with bug

10.0.10

Is this a regression from previous behavior?

Yes, this used to work in .NET MAUI

Last version that worked well

No response

Affected platforms

iOS

Affected platform versions

iOS 15 -iOS 26.1

Did you find any workaround?

No response

Relevant log output

```</issue_description>

## Comments on the Issue (you are @copilot in this section)

<comments>
<comment_new><author>@jfversluis</author><body>
Yeah I've seen this too unfortunately.</body></comment_new>
</comments>

Custom agent used: issue-resolver
Specialized agent for investigating and resolving community-reported .NET MAUI issues through hands-on testing and implementation


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI and others added 2 commits December 1, 2025 09:57
Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>
Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix SearchHandler suggestions list alignment on iPhone Fix iOS SearchHandler suggestions list gap on iPhone Dec 1, 2025
Copilot AI requested a review from jfversluis December 1, 2025 10:03
@jfversluis

Copy link
Copy Markdown
Member

/azp run MAUI-public

@azure-pipelines

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

@jfversluis

Copy link
Copy Markdown
Member

/azp run MAUI-UITests-public

@azure-pipelines

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

@jfversluis

Copy link
Copy Markdown
Member

@copilot this fix is confirmed to not work. Can you have a look at the workaround in #32930 (comment) that does work. It looks a bit hacky though, is there a decent way to implement this directly in our codebase?

…resentation

Co-authored-by: jfversluis <939291+jfversluis@users.noreply.github.com>

Copilot AI commented Dec 4, 2025

Copy link
Copy Markdown
Contributor Author

@copilot this fix is confirmed to not work. Can you have a look at the workaround in #32930 (comment) that does work. It looks a bit hacky though, is...

I've updated the fix based on the workaround from @pictos. The previous approach setting ExtendedLayoutIncludesOpaqueBars on the results view controller didn't work because the actual cause is the navigation bar hiding during search presentation.

The new fix in commit 20c776f sets HidesNavigationBarDuringPresentation = false and ObscuresBackgroundDuringPresentation = false directly on the UISearchController when it's created in ShellPageRendererTracker.AttachSearchController(). This is cleaner than the workaround approach because it sets these properties right after the search controller is created, rather than having to access it later via the navigation controller.

@jfversluis

Copy link
Copy Markdown
Member

/azp run MAUI-public

@azure-pipelines

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

@kubaflo kubaflo marked this pull request as ready for review May 9, 2026 14:10
Copilot AI review requested due to automatic review settings May 9, 2026 14:10

Copilot AI 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.

Pull request overview

This PR addresses an iOS (iPhone) Shell SearchHandler layout issue where the suggestions list visually detaches from the search bar during the “hide navigation bar” presentation animation, leaving a gap. The fix adjusts UISearchController presentation behavior in the iOS Shell renderer and adds a UI test case to cover the scenario.

Changes:

  • Configure the iOS UISearchController to not hide the navigation bar and not obscure the background during search presentation.
  • Add a new HostApp issue page (Shell + SearchHandler) that reproduces the suggestions-gap scenario.
  • Add an iOS UI test that triggers suggestions and validates layout via screenshot.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs Updates iOS Shell search controller configuration to prevent the nav bar hide animation that causes the suggestions gap on iPhone.
src/Controls/tests/TestCases.HostApp/Issues/Issue32930.xaml Adds a Shell-based reproduction page wiring up a custom SearchHandler with suggestions.
src/Controls/tests/TestCases.HostApp/Issues/Issue32930.xaml.cs Adds the issue attribute + a SearchHandler implementation that filters a fixed list to generate suggestions.
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32930.cs Adds an iOS UI test that enters text into the iOS search field and verifies the rendered result via screenshot.

Comment on lines +943 to +945
// iPad doesn't have this issue because the navigation bar layout differs.
_searchController.HidesNavigationBarDuringPresentation = false;
_searchController.ObscuresBackgroundDuringPresentation = false;

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.

Looks good

@MauiBot

This comment has been minimized.

@kubaflo

kubaflo commented May 24, 2026

Copy link
Copy Markdown
Contributor

/review -b feature/refactor-copilot-yml

@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.

@@ -0,0 +1,35 @@
#if IOS

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.

[major] Test coverage / CI discovery - Wrapping the whole test file in #if IOS makes Android test discovery match zero tests when the gate filters to Issue32930, which is the known gate failure. Keep the fixture/method discoverable and skip/guard the body on non-iOS, or use the test infrastructure's platform filtering so non-iOS discovery does not fail with 0 tests.

@MauiBot MauiBot added the s/agent-fix-win AI found a better alternative fix than the PR label May 24, 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 please verify the ai's suggestions?

Comment on lines +943 to +945
// iPad doesn't have this issue because the navigation bar layout differs.
_searchController.HidesNavigationBarDuringPresentation = false;
_searchController.ObscuresBackgroundDuringPresentation = false;

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.

Looks good

@kubaflo

kubaflo commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

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

@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

@copilot — new AI review results are available based on this last commit: 20c776f.
Fix SearchHandler suggestions gap by preventing nav bar hide during presentation To request a fresh review after new comments or commits, comment /review rerun.

Gate Failed Code Review Needs Changes Confidence High Platform iOS

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

Gate Result: ❌ FAILED

Platform: IOS · Base: main · Merge base: e904e900

🩺 Fix does not pass the tests — every test still fails after applying the fix. The PR's change does not resolve the failure(s).

Test Without Fix (expect FAIL) With Fix (expect PASS)
🖥️ Issue32930 Issue32930 ✅ FAIL — 336s ❌ FAIL — 126s
🔴 Without fix — 🖥️ Issue32930: FAIL ✅ · 336s
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 586 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 578 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 4.44 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Foldable/src/Controls.Foldable.csproj (in 4.74 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 5.33 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj (in 5.34 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 5.34 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 5.34 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 5.35 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/maps/src/Maps.csproj (in 5.35 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 5.36 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.80-ci+azdo.14304710
  Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0-ios26.0/Microsoft.Maui.dll
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  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.80-ci+azdo.14304710
  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.80-ci+azdo.14304710
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  Controls.Xaml -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Xaml.dll
  Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
  Controls.Foldable -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Foldable.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:03:03.36
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/CustomAttributes/Controls.CustomAttributes.csproj (in 691 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/VisualTestUtils/VisualTestUtils.csproj (in 692 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 702 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 692 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Core/UITest.Core.csproj (in 9 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 712 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 815 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 477 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.NUnit/UITest.NUnit.csproj (in 1.43 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Appium/UITest.Appium.csproj (in 3.54 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Analyzers/UITest.Analyzers.csproj (in 4.51 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/VisualTestUtils.MagickNet/VisualTestUtils.MagickNet.csproj (in 6.96 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.iOS.Tests/Controls.TestCases.iOS.Tests.csproj (in 6.25 sec).
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  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.80-ci+azdo.14304710
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  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.80-ci+azdo.14304710
  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
  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.08]   Discovering: Controls.TestCases.iOS.Tests
[xUnit.net 00:00:00.22]   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/6/2026 3:20:32 PM FixtureSetup for Issue32930(iOS)
>>>>> 6/6/2026 3:20:38 PM SearchHandlerSuggestionsListFollowsSearchBar Start
>>>>> 6/6/2026 3:20:42 PM SearchHandlerSuggestionsListFollowsSearchBar Stop
>>>>> 6/6/2026 3:20:42 PM Log types: syslog, crashlog, performance, safariConsole, safariNetwork, server
  Failed SearchHandlerSuggestionsListFollowsSearchBar [6 s]
  Error Message:
   VisualTestUtils.VisualTestFailedException : 
Baseline snapshot not yet created: /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/snapshots/ios-26/SearchHandlerSuggestionsListFollowsSearchBar.png
Ensure new snapshot is correct:    /Users/cloudtest/vss/_work/1/a/Controls.TestCases.Shared.Tests/snapshots-diff/ios-26/SearchHandlerSuggestionsListFollowsSearchBar.png
  and if it is, push a change to add it to the 'snapshots' directory.
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 84
   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.Issue32930.SearchHandlerSuggestionsListFollowsSearchBar() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32930.cs:line 32
   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/Issue32930.trx

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

🟢 With fix — 🖥️ Issue32930: FAIL ❌ · 126s
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 403 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 424 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 473 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 436 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.80-ci+azdo.14304710
  Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0-ios26.0/Microsoft.Maui.dll
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  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.80-ci+azdo.14304710
  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.80-ci+azdo.14304710
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.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
  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
  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:03.25
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 390 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 425 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 438 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 463 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 487 ms).
  8 of 13 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  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.80-ci+azdo.14304710
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304710
  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.80-ci+azdo.14304710
  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
  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
  VisualTestUtils.MagickNet -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.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.06]   Discovering: Controls.TestCases.iOS.Tests
[xUnit.net 00:00:00.20]   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/6/2026 3:22:40 PM FixtureSetup for Issue32930(iOS)
>>>>> 6/6/2026 3:22:45 PM SearchHandlerSuggestionsListFollowsSearchBar Start
>>>>> 6/6/2026 3:22:49 PM SearchHandlerSuggestionsListFollowsSearchBar Stop
>>>>> 6/6/2026 3:22:49 PM Log types: syslog, crashlog, performance, safariConsole, safariNetwork, server
  Failed SearchHandlerSuggestionsListFollowsSearchBar [5 s]
  Error Message:
   VisualTestUtils.VisualTestFailedException : 
Baseline snapshot not yet created: /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/snapshots/ios-26/SearchHandlerSuggestionsListFollowsSearchBar.png
Ensure new snapshot is correct:    /Users/cloudtest/vss/_work/1/a/Controls.TestCases.Shared.Tests/snapshots-diff/ios-26/SearchHandlerSuggestionsListFollowsSearchBar.png
  and if it is, push a change to add it to the 'snapshots' directory.
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 84
   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.Issue32930.SearchHandlerSuggestionsListFollowsSearchBar() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32930.cs:line 32
   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/Issue32930.trx

Test Run Failed.
Total tests: 1
     Failed: 1
 Total time: 28.7737 Seconds
>>> TRX_RESULT_FILE: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue32930.trx

⚠️ Failure Details

  • Issue32930 FAILED with fix (should pass)
    • SearchHandlerSuggestionsListFollowsSearchBar [5 s]
    • VisualTestUtils.VisualTestFailedException : Baseline snapshot not yet created: /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/snapshots/ios-26/SearchHandlerSu...
📁 Fix files reverted (2 files)
  • eng/pipelines/ci-copilot.yml
  • src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs

UI Tests — Shell

Detected UI test categories: Shell

Deep UI tests — 189 passed, 104 failed across 1 category on platform-pool agent (replaces in-process counts above).

🧪 UI Test Execution Results (deep, platform pool)

Category Tests Snapshot diffs
Shell 189/308 (104 ❌) 102 diff PNGs
Shell — 104 failed tests
VerifyShellFlyout_ShellContentAndBackgroundImage
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ShellFeatureTests.VerifyShellFlyout_ShellContentAndBackgroundImage() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShellFeatureMatrixTests.cs:line 808
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args
...
ChangeShellContentTitle
System.InvalidOperationException : 
Snapshot different than baseline: ChangeShellContentTitle.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ChangeShellContentTitle.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or downl
...
ShellPages_PresentationModeNotAnimated
System.InvalidOperationException : 
Snapshot different than baseline: ShellPages_PresentationModeNotAnimated.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ShellPages_PresentationModeNotAnimated.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image
...
VerifyFlyoutSelectedCurrentItem
System.InvalidOperationException : 
Snapshot different than baseline: VerifyFlyoutSelectedCurrentItem.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyFlyoutSelectedCurrentItem.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test att
...
ShellPages_ShowTitleViewHidden
System.InvalidOperationException : 
Snapshot different than baseline: ShellPages_ShowTitleViewHidden.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ShellPages_ShowTitleViewHidden.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attac
...
BackButtonBehaviorIsVisibleWorksWithCustomIcon
System.InvalidOperationException : 
Snapshot different than baseline: BackButtonBehaviorIsVisibleWorksWithCustomIcon.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: BackButtonBehaviorIsVisibleWorksWithCustomIcon.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update th
...
NavigationBarShouldRemainHiddenAfterNavigatingBack
System.InvalidOperationException : 
Snapshot different than baseline: NavigationBarShouldRemainHiddenAfterNavigatingBack.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: NavigationBarShouldRemainHiddenAfterNavigatingBack.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then u
...
ShellPages_IsVisibleTrue
System.InvalidOperationException : 
Snapshot different than baseline: ShellPages_IsVisibleTrue.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ShellPages_IsVisibleTrue.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or dow
...
VerifyShellFlyoutBackgroundImage
System.InvalidOperationException : 
Snapshot different than baseline: VerifyShellFlyoutBackgroundImage.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyShellFlyoutBackgroundImage.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test a
...
TabBarDisabledColorAppliedToDisabledTab
System.InvalidOperationException : 
Snapshot different than baseline: DisabledTabWithGreenColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: DisabledTabWithGreenColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or d
...
ShellPages_ForegroundColorAndTitleColor
System.InvalidOperationException : 
Snapshot different than baseline: ShellPages_ForegroundColorAndTitleColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ShellPages_ForegroundColorAndTitleColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline ima
...
TabBarShouldBeVisibleOnMacCatalyst
System.InvalidOperationException : 
Snapshot different than baseline: TabBarShouldBeVisibleOnMacCatalyst.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: TabBarShouldBeVisibleOnMacCatalyst.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See te
...
TabBarVisibilityHidesOnPage1UsingDirectSet
System.InvalidOperationException : 
Snapshot different than baseline: TabBarVisibilityHidesOnPage1UsingDirectSet.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: TabBarVisibilityHidesOnPage1UsingDirectSet.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseli
...
ShellFlyoutIconShouldNotBeBlack
System.InvalidOperationException : 
Snapshot different than baseline: ShellFlyoutIconShouldNotBeBlack.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ShellFlyoutIconShouldNotBeBlack.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test att
...
FlyoutMenuShouldNotDisappearWhenNavigateUsingServices
System.InvalidOperationException : 
Snapshot different than baseline: FlyoutMenuShouldNotDisappearWhenNavigateUsingServices.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: FlyoutMenuShouldNotDisappearWhenNavigateUsingServices.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), 
...
VerifyShell_TabBarForegroundColorAndTitleColor
System.InvalidOperationException : 
Snapshot different than baseline: VerifyShell_TabBarForegroundColorAndTitleColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyShell_TabBarForegroundColorAndTitleColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update th
...
VerifyShellFlyout_DisplayOptionsAsMultipleItems
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ShellFeatureTests.VerifyShellFlyout_DisplayOptionsAsMultipleItems() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShellFeatureMatrixTests.cs:line 441
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
...
LargeTitleTransitionsOnScroll
System.InvalidOperationException : 
Snapshot different than baseline: Issue33037_BeforeScroll.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: Issue33037_BeforeScroll.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or downl
...
VerifyFlyoutContentHasNoDefaultCornerRadius
System.InvalidOperationException : 
Snapshot different than baseline: VerifyFlyoutContentHasNoDefaultCornerRadius.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyFlyoutContentHasNoDefaultCornerRadius.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the base
...
VerifyShellMenuItemsAlignedInRTL
System.InvalidOperationException : 
Snapshot different than baseline: VerifyShellMenuItemsAlignedInRTL.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyShellMenuItemsAlignedInRTL.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test a
...
VerifyNavBarStatusAtInitialLoading
System.InvalidOperationException : 
Snapshot different than baseline: VerifyNavBarStatusAtInitialLoading.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: VerifyNavBarStatusAtInitialLoading.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See te
...
ShellBackButtonBehaviorShouldWork
System.InvalidOperationException : 
Snapshot different than baseline: ShellBackButtonBehaviorShouldWork.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ShellBackButtonBehaviorShouldWork.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test
...
TabBarVisibilityHidesOnPage2UsingBinding
System.InvalidOperationException : 
Snapshot different than baseline: TabBarVisibilityHidesOnPage2UsingBinding.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: TabBarVisibilityHidesOnPage2UsingBinding.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline i
...
VerifyShellFlyout_FlyoutBackDrop
System.InvalidOperationException : Unable to extract difference percentage from exception message.
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 296
   at Microsoft.Maui.TestCases.Tests.ShellFeatureTests.VerifyShellFlyout_FlyoutBackDrop() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/ShellFeatureMatrixTests.cs:line 515
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at System.R
...
ShellAppearanceUpdatesWhenChangingShellSectionToTab_1
System.InvalidOperationException : 
Snapshot different than baseline: ShellAppearanceUpdatesWhenChangingShellSectionToTab_1.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: ShellAppearanceUpdatesWhenChangingShellSectionToTab_1.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), 
...
EnsureCustomFlyoutIconColor
System.InvalidOperationException : 
Snapshot different than baseline: EnsureCustomFlyoutIconColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: EnsureCustomFlyoutIconColor.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment 
...
SearchHandlerVisibilityChangesToCollapsible
System.InvalidOperationException : 
Snapshot different than baseline: SearchHandlerVisibilityChangesToCollapsible.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: SearchHandlerVisibilityChangesToCollapsible.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the base
...
NavigationBetweenFlyoutItems
System.InvalidOperationException : 
Snapshot different than baseline: NavigationBetweenFlyoutItems.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: NavigationBetweenFlyoutItems.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachmen
...
TabBarVisibilityAfterMultiLevelPopToRoot
System.InvalidOperationException : 
Snapshot different than baseline: TabBarVisibilityAfterMultiLevelPopToRoot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: TabBarVisibilityAfterMultiLevelPopToRoot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline i
...
FlyoutItemTextShouldDisplayProperly
System.InvalidOperationException : 
Snapshot different than baseline: FlyoutItemTextShouldDisplayProperly.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
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


iOS 26 visual tests require an iPhone 11 Pro simulator for correct screen resolution.
To create the simulator, run:
  xcrun simctl create "iPhone 11 Pro" com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro com.apple.CoreSimulator.SimRuntime.iOS-26-0

Then run the tests targeting the new simulator.
  ----> VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: FlyoutItemTextShouldDisplayProperly.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See 
...

(+74 more — see TRX in artifact)

📎 Download drop-deep-uitests artifact (TRX + snapshot diffs)


Pre-Flight — Context & Validation

Issue: #32930 - [iOS] SearchHandler suggestions list does not follow the search bar upward movement on iPhone, creating a layout gap
PR: #32931 - Fix iOS SearchHandler suggestions list gap on iPhone
Platforms Affected: iOS (reported iPhone-only; iPad and Android reported unaffected)
Files Changed: 1 implementation, 3 test

Key Findings

  • Issue reproduces when focusing a Shell SearchHandler on iPhone: the search bar/nav title animates upward while the suggestions list remains anchored lower, leaving a visible gap.
  • The PR changes ShellPageRendererTracker.AttachSearchController() to disable UISearchController.HidesNavigationBarDuringPresentation and ObscuresBackgroundDuringPresentation for all iOS Shell search controllers.
  • Community feedback says setting ExtendedLayoutIncludesOpaqueBars from a custom renderer did not resolve the issue; MAUI/SDK layout appears to override that workaround.
  • The added UI test targets the Shell category and screenshot-verifies the suggestions placement, but the whole fixture is wrapped in #if IOS, which can break targeted discovery on non-iOS platforms.

Code Review Summary

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

Key code review findings:

  • src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32930.cs:1 — wrapping the entire fixture in #if IOS can make targeted discovery find zero tests on non-iOS instead of a skipped/guarded test.
  • ⚠️ src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs:1021-1027 — the iPhone-specific fix is applied to all UIKit Shell search controllers, broadening behavior to iPad and possibly MacCatalyst.
  • ⚠️ src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32930.cs:32 — immediate screenshot verification may capture UIKit transition state; use a retry timeout.

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #32931 Set UISearchController.HidesNavigationBarDuringPresentation = false and ObscuresBackgroundDuringPresentation = false unconditionally when creating Shell search controller; add iOS screenshot UI test. ❌ FAILED (Gate) ShellPageRendererTracker.cs, Issue32930.xaml, Issue32930.xaml.cs, Issue32930.cs Original PR; gate failure is attributed to test discovery/behavior not matching expectations.

Code Review — Deep Analysis

Code Review — PR #32931

Independent Assessment

What this changes: Creates a UISearchController with navigation-bar hiding/background obscuring disabled, plus an iOS Shell UI regression test.
Inferred motivation: Avoid the iPhone gap between the Shell search bar and suggestions list when search presentation animates.

Reconciliation with PR Narrative

Author claims: Fixes #32930 by setting HidesNavigationBarDuringPresentation = false and ObscuresBackgroundDuringPresentation = false; adds screenshot UI coverage.
Agreement/disagreement: The implementation matches the claimed fix and issue comments confirm the workaround removes the gap. However, the test structure has a discovery problem, and the fix changes behavior beyond the stated iPhone-only scenario.

Findings

❌ Error — iOS-only preprocessor guard can break targeted test discovery

src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32930.cs:1

Wrapping the entire NUnit fixture in #if IOS means non-iOS test assemblies contain no Issue32930 test at all. When CI/gate tooling targets this issue test on another platform, discovery can report zero matching tests instead of a platform skip/guard; this is also already reflected in existing review feedback as a known gate failure. Keep the fixture/method discoverable and skip/guard execution on unsupported platforms, or use the UI test infrastructure's platform filtering.

⚠️ Warning — iPhone-specific fix is applied to all UIKit Shell search controllers

src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs:944-945

The comments and issue describe an iPhone-only gap, and explicitly say iPad does not have the issue. This code applies the changed UISearchController behavior unconditionally for this iOS Shell path, changing default native search presentation behavior for iPad as well, and potentially MacCatalyst if this compatibility path is shared there. Consider scoping to UIUserInterfaceIdiom.Phone or documenting why the broader behavior change is intended.

⚠️ Warning — screenshot may capture UIKit transition state

src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32930.cs:32

The test enters text into the native search field and immediately verifies a screenshot after waiting only for "Apple". Because search presentation/layout involves UIKit animation, VerifyScreenshot(retryTimeout: TimeSpan.FromSeconds(...)) would reduce flakiness.

Devil's Advocate

The broad search-controller behavior may be an acceptable product tradeoff: issue comments say the visible gap is fixed and the navigation-bar behavior change "seems work fine." I would not block solely on that. The test discovery issue is concrete and CI-relevant, so it should be fixed before merge. CI currently includes a maui-pr/Build Analysis failure from an integration timeout; deep Shell UI tests are reported passing, but the PR is not fully green.

Verdict: NEEDS_CHANGES

Confidence: high
Summary: The functional fix appears plausible and externally validated, but the added test is conditionally compiled away on non-iOS and can break targeted discovery/gate runs. Address the test discovery issue before merge; consider narrowing or explicitly justifying the broader native search behavior change.


Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix Scope HidesNavigationBarDuringPresentation=false/ObscuresBackgroundDuringPresentation=false to iPhone ShowsResults; fix test discovery/retry. ❌ FAIL 2 files Compile failure: IgnoreIfPlatforms unavailable on _IssuesUITest.
2 try-fix Leave search-controller presentation defaults; adjust ShellSearchResultsRenderer top layout/content inset for iPhone results. ❌ FAIL 3 files Build failure: public overrides require PublicAPI entries (RS0016).
3 try-fix Leave presentation defaults; use private UISearchControllerDelegate to relayout results controller/table during presentation. ❌ FAIL 2 files Built, but visual inspection showed suggestions overlapped/appeared behind the search UI; tightened geometry check measured verticalGap = -104.
4 try-fix Scope native presentation opt-out to iPhone result searches; fix discovery guard and add required iOS 26 screenshot baseline. ✅ PASS 3 files Better than PR: narrower behavior change plus complete UI test assets.
PR PR #32931 Unconditionally disable nav-bar hiding/background obscuring for Shell UISearchController; add iOS screenshot UI test. ❌ FAILED (Gate) 4 files Original PR; broad iPad-impact risk and missing/non-discoverable test behavior.

Cross-Pollination

Model Round New Ideas? Details
maui-expert-reviewer 1 Yes Proposed phone-scoped native flag fix, results-renderer inset/layout alternatives, delegate relayout, and TitleView fallback.
maui-expert-reviewer 2 Yes After try-fix-1 compile failure, recommended Assert.Ignore runtime guard and a results-renderer layout approach.
maui-expert-reviewer 3 Yes After RS0016 failure, recommended private UISearchControllerDelegate relayout to avoid public API changes.
maui-expert-reviewer 4 No blocking findings Reviewed passing scoped candidate; verdict LGTM once snapshot baseline is included.

Exhausted: No
Selected Fix: Candidate #4 — it is the only candidate that passed the targeted iOS UI test and is demonstrably better than PR #32931 because it scopes the UIKit behavior change to the reported iPhone + results scenario, fixes cross-platform test discovery, and includes the missing screenshot baseline.


Report — Final Recommendation

Comparative Analysis — PR #32931

Candidate ranking

Rank Candidate Regression result Assessment
1 try-fix-4 ✅ PASS Best candidate. It preserves the PR's effective UIKit workaround while scoping it to SearchHandler.ShowsResults on iPhone, fixes cross-platform test discovery, adds screenshot retry, and includes the required iOS 26 baseline.
2 pr-plus-reviewer Not rerun in this phase Better than raw PR because the expert feedback was applied in sandbox form, but it lacks the recorded passing regression evidence that try-fix-4 has.
3 pr ❌ FAILED Functional direction is plausible, but the gate failed because the screenshot baseline was missing; it also applies an iPhone-specific behavior change unconditionally to broader UIKit Shell search scenarios.
4 try-fix-3 ❌ FAIL Avoided public API changes, but visual/geometry validation showed the suggestions were moved too far upward and overlapped the search UI (verticalGap = -104).
5 try-fix-2 ❌ FAIL Tried a results-renderer layout/inset fix, but failed build because public overrides required PublicAPI entries; adding public API for this internal layout workaround is not desirable.
6 try-fix-1 ❌ FAIL Had the right scoped implementation idea, but used an unavailable IgnoreIfPlatforms helper and failed compilation.

Winner

try-fix-4 is the single winning candidate. It is the only candidate with a recorded passing targeted iOS UI test, and candidates that failed regression tests are ranked lower as required. It also incorporates the best expert-review feedback: scope the UIKit presentation change to the reported iPhone results scenario, keep non-iOS test discovery intact, use screenshot retry for UIKit animation timing, and include the missing snapshot baseline.


Future Action — alternative fix proposed (try-fix-4)

Automated review — alternative fix proposed

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

Why: try-fix-4 is the only candidate with a recorded passing targeted iOS UI regression run. It keeps the effective UISearchController workaround but scopes it to iPhone result searches, fixes test discovery/flakiness, and includes the missing screenshot baseline.

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-4)
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 74948b0f6f..feba301087 100644
--- a/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs
+++ b/src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cs
@@ -1017,6 +1017,11 @@ namespace Microsoft.Maui.Controls.Platform.Compatibility
 			}
 
 			_searchController = new UISearchController(_resultsRenderer?.ViewController);
+			if (SearchHandler.ShowsResults && UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone)
+			{
+				_searchController.HidesNavigationBarDuringPresentation = false;
+				_searchController.ObscuresBackgroundDuringPresentation = false;
+			}
 			var visibility = SearchHandler.SearchBoxVisibility;
 			if (visibility != SearchBoxVisibility.Hidden)
 			{
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue32930.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue32930.xaml
new file mode 100644
index 0000000000..171d170ded
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue32930.xaml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Shell xmlns:controls="clr-namespace:Maui.Controls.Sample.Issues"
+       xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
+       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
+       x:Class="Maui.Controls.Sample.Issues.Issue32930">
+	<ShellContent
+		Title="Home"
+		Route="MainPage">
+		<ContentPage>
+			<Shell.SearchHandler>
+				<controls:Issue32930SearchHandler 
+					x:Name="searchHandler"
+					AutomationId="SearchHandler"
+					Placeholder="Type to search..."
+					Keyboard="Plain"
+					ShowsResults="True" />
+			</Shell.SearchHandler>
+			<StackLayout Padding="20">
+				<Label 
+					AutomationId="Instructions"
+					Text="Tap the search bar. On iPhone, the suggestions list should follow the search bar upward with no gap." />
+			</StackLayout>
+		</ContentPage>
+	</ShellContent>
+</Shell>
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue32930.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue32930.xaml.cs
new file mode 100644
index 0000000000..61f14d6948
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue32930.xaml.cs
@@ -0,0 +1,43 @@
+namespace Maui.Controls.Sample.Issues;
+
+[Issue(IssueTracker.Github, 32930, "[iOS] SearchHandler suggestions list does not follow the search bar upward movement on iPhone, creating a layout gap", PlatformAffected.iOS)]
+public partial class Issue32930 : Shell
+{
+	public Issue32930()
+	{
+		InitializeComponent();
+	}
+}
+
+public class Issue32930SearchHandler : SearchHandler
+{
+	static readonly List<string> _allItems = new()
+	{
+		"Apple",
+		"Banana",
+		"Cherry",
+		"Date",
+		"Elderberry",
+		"Fig",
+		"Grape"
+	};
+
+	public Issue32930SearchHandler()
+	{
+		ItemsSource = _allItems;
+	}
+
+	protected override void OnQueryChanged(string oldValue, string newValue)
+	{
+		base.OnQueryChanged(oldValue, newValue);
+
+		if (string.IsNullOrEmpty(newValue))
+		{
+			ItemsSource = _allItems;
+		}
+		else
+		{
+			ItemsSource = _allItems.Where(s => s.Contains(newValue, StringComparison.OrdinalIgnoreCase)).ToList();
+		}
+	}
+}
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32930.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32930.cs
new file mode 100644
index 0000000000..e852eeec97
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32930.cs
@@ -0,0 +1,30 @@
+using System;
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests.Issues;
+
+public class Issue32930 : _IssuesUITest
+{
+	public Issue32930(TestDevice testDevice) : base(testDevice)
+	{
+	}
+
+	public override string Issue => "[iOS] SearchHandler suggestions list does not follow the search bar upward movement on iPhone, creating a layout gap";
+
+	[Test]
+	[Category(UITestCategories.Shell)]
+	public void SearchHandlerSuggestionsListFollowsSearchBar()
+	{
+		if (Device != TestDevice.iOS)
+		{
+			Assert.Ignore("This regression covers iPhone UISearchController search results presentation.");
+		}
+
+		App.WaitForElement("Instructions");
+		App.EnterText(AppiumQuery.ByXPath("//XCUIElementTypeSearchField"), "A");
+		App.WaitForElement("Apple");
+		VerifyScreenshot(retryTimeout: TimeSpan.FromSeconds(2));
+	}
+}
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios-26/SearchHandlerSuggestionsListFollowsSearchBar.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios-26/SearchHandlerSuggestionsListFollowsSearchBar.png
new file mode 100644
index 0000000000..0000000000
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios-26/SearchHandlerSuggestionsListFollowsSearchBar.png differ

@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 check the ai's suggestions?

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

Labels

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)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[iOS] SearchHandler suggestions list does not follow the search bar upward movement on iPhone, creating a layout gap

5 participants