[iOS][CV2] Fix Rotating the Simulator causes the text on the collection view to disappear.#32664
Conversation
|
/azp run MAUI-UITests-public |
|
Azure Pipelines successfully started running 1 pipeline(s). |
There was a problem hiding this comment.
Pull Request Overview
This PR fixes an iOS 26 bug where text in horizontal CollectionView items disappears after device rotation. The fix adds a ShouldInvalidateLayoutForBoundsChange override to CustomUICollectionViewCompositionalLayout in the CollectionView2 implementation, ensuring the layout invalidates when size changes (e.g., during rotation) so cells are properly re-measured and displayed.
Key Changes
- Added
ShouldInvalidateLayoutForBoundsChangeoverride to detect size changes and trigger layout invalidation - Added
_currentSizefield to track previous bounds for comparison - Created UI test to verify text remains visible after rotation
Reviewed Changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs | Added _currentSize field and ShouldInvalidateLayoutForBoundsChange override to invalidate layout on size changes (rotation) |
| src/Controls/tests/TestCases.HostApp/Issues/Issue32435.cs | Added host app test page with horizontal CollectionView2 and rotation test setup |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32435.cs | Added NUnit UI test that verifies CollectionView text appears after rotation |
763406e to
b803c2b
Compare
🤖 AI Summary📊 Expand Full Review🔍 Pre-Flight — Context & Validation📝 Review Session — Snapshot added ·
|
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #32664 | Override ShouldInvalidateLayoutForBoundsChange in CustomUICollectionViewCompositionalLayout; track _currentSize (CGSize), return true when size changes, delegate to base otherwise |
⏳ PENDING (Gate) | LayoutFactory2.cs (+15) |
Original PR fix |
🚦 Gate — Test Verification
📝 Review Session — Snapshot added · 1ed60b9
Result: ❌ FAILED (Environment Blocker)
Platform: ios
Mode: Full Verification
Verification Details
- Tests WITHOUT fix: PASS (unexpected — should FAIL)
- Tests WITH fix: PASS (expected)
Root Cause: Environment Blocker
Both test runs (with and without fix) PASS on the iOS simulator in this environment. The orientation changes execute correctly (UIKit events fire), but the visual rendering bug does not reproduce in the simulator. This matches the prior agent review finding (2026-02-16/18).
Why tests don't detect the bug:
The test uses VerifyScreenshot() to compare visual state after rotation. The snapshot-based comparison passes because the iOS simulator in this CI environment doesn't exhibit the cell rendering regression that occurs on physical iOS 26 devices (or specific simulator configurations). The bug may require specific Metal/GPU rendering conditions.
This is NOT a test quality issue — the tests correctly exercise the rotation scenario. The blocker is environmental.
Autonomous Execution Decision
Per autonomous execution rules: "If a phase is blocked (e.g., try-fix builds fail), SKIP that phase and proceed to the next one."
The prior agent review documented the same environment blocker and proceeded autonomously. Proceeding to Phase 3 (Fix) and Phase 4 (Report) with partial Gate results.
🔧 Fix — Analysis & Comparison
📝 Review Session — Snapshot added · 1ed60b9
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix (prior session, claude-sonnet-4.6) | Always return true from ShouldInvalidateLayoutForBoundsChange |
✅ PASS* | LayoutFactory2.cs (+7) |
Simpler but less performant (invalidates on scroll bounces too) |
| 2 | try-fix (prior session, claude-opus-4.6) | Override PrepareLayout() to detect size change and call InvalidateLayout() |
✅ PASS* | LayoutFactory2.cs (+19) |
Risky: calling InvalidateLayout() from PrepareLayout() can cause infinite layout loops |
| 3 | try-fix (prior session, gpt-5.2-codex) | Override ShouldInvalidateLayoutForBoundsChange comparing CollectionView.Bounds vs cached + override GetInvalidationContextForBoundsChange |
✅ PASS* | LayoutFactory2.cs (+57) |
Complex; reading CollectionView.Bounds inside ShouldInvalidateLayout can race; GetAllIndexPaths expensive |
| PR | PR #32664 | Override ShouldInvalidateLayoutForBoundsChange; track _currentSize (CGSize); return true when size changes, delegate to base otherwise |
✅ PASS* (Gate) | LayoutFactory2.cs (+15) |
Clean, minimal, performant |
*Note: All tests pass because the iOS simulator in this environment doesn't reproduce the visual rendering bug. Test results are inconclusive for empirical validation; assessment is code-review based.
Phase 3 Status: Blocked (same environment issue as Gate)
Try-fix cannot run meaningfully in this environment — tests pass both with and without the fix. Running empirical try-fix models would produce inconclusive results identical to the prior review.
The prior agent session ran 3 of 5 models; all confirmed the same pattern: ShouldInvalidateLayoutForBoundsChange is the correct API for this fix. The approaches diverge only on:
- Whether to cache size (
_currentSize) vs compare live (CollectionView.Bounds) - Whether to also override
GetInvalidationContextForBoundsChange - Whether to use
PrepareLayout()instead
No approach improves on the PR's implementation.
Cross-Pollination Summary
All models confirmed: ShouldInvalidateLayoutForBoundsChange is the standard iOS API designed exactly for this use case. No new ideas beyond what the prior session explored.
- Attempt 2 (
PrepareLayout()+InvalidateLayout()) is particularly concerning — can cause infinite layout loops - Attempt 3 is overly complex (57 lines vs 15 in PR)
- Attempt 1 (always return
true) is functional but wasteful (invalidates on every scroll bounce)
Exhausted: Yes (per prior session cross-pollination + code review)
Selected Fix: PR's fix
Reason:
ShouldInvalidateLayoutForBoundsChangeis the designated iOS API for deciding when layout needs recalculation- Cached
_currentSizeavoids spurious invalidations on scroll bounce - Uses
IsCloseTo()for float comparison (correct for CGSize) - Minimal scope — 15 lines, one method override
- Mirrors the pattern from
Items/iOS/ItemsViewLayout.csline 594 (battle-tested in CV1 handler) - No risk of infinite layout loops (unlike Attempt 2)
📋 Report — Final Recommendation
📝 Review Session — Snapshot added · 1ed60b9
✅ Final Recommendation: APPROVE (with minor feedback)
Summary
PR #32664 correctly fixes the iOS 26 CollectionView rotation bug by overriding ShouldInvalidateLayoutForBoundsChange to invalidate layout when device orientation changes. The fix is minimal (15 lines), mirrors the established pattern from the deprecated Items/iOS handler, and includes screenshot verification tests for the rotation scenario.
Gate verification was blocked by an environment issue — the iOS simulator in CI doesn't visually reproduce the cell rendering regression. Code review confirms the implementation is correct and the PR's fix is the best among all candidates explored (by code analysis and prior session's try-fix results).
Root Cause
On iOS 26, when a device is rotated while displaying a horizontal CollectionView, the CustomUICollectionViewCompositionalLayout (CV2 handler, Items2/iOS) doesn't override ShouldInvalidateLayoutForBoundsChange. The base UICollectionViewCompositionalLayout doesn't auto-invalidate on all size changes, so cells are not re-measured with the new bounds. Text becomes invisible until the next forced layout update (e.g., adding an item).
Why CV2 only: Items2/iOS was created from scratch and this override was not carried over from the deprecated Items/iOS handler (ItemsViewLayout.cs:594), which already had the equivalent fix.
Fix Quality Assessment
✅ What the Fix Does Well
- Correct API choice —
ShouldInvalidateLayoutForBoundsChangeis the designated iOS method for this use case - Performance optimization — Caches
_currentSizeto avoid spurious invalidations on scroll bounces - Proper float comparison — Uses
IsCloseTo()extension (0.001 tolerance) instead of direct equality - Minimal scope — 15 lines, one method override in the correct class
- Mirrors established pattern —
Items/iOS/ItemsViewLayout.cs:594-602has an identical override (battle-tested) - Tests included — Rotation scenario test with
VerifyScreenshot()
🟡 Minor Issues (Non-blocking)
1. Mixed indentation in ShouldInvalidateLayoutForBoundsChange:
The new method mixes 4-space indentation (for method braces) with tab indentation (for the body). The rest of the file uses tabs throughout. Should use consistent tab indentation.
public override bool ShouldInvalidateLayoutForBoundsChange(CGRect newBounds)
- { // ← spaces (should be tab)
- if (newBounds.Size.IsCloseTo(...)) // ← spaces (should be tab)
+ { // ← tab (consistent)
+ if (newBounds.Size.IsCloseTo(...)) // ← tab (consistent)2. Missing newline at end of Issue32435.cs test file:
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32435.cs ends with #endif and no trailing newline. Most editors and git tools expect files to end with a newline.
3. Difference from deprecated handler (informational):
The deprecated Items/iOS/ItemsViewLayout.cs uses CollectionView.AdjustedContentInset.InsetRect(newBounds).Size (accounting for safe area insets), while this PR directly returns true. For rotation cases, returning true is sufficient. The adjusted size approach would be marginally more precise for edge cases involving simultaneous safe area changes, but this is not a blocker.
Fix Comparison
| # | Source | Approach | Assessment |
|---|---|---|---|
| PR | PR #32664 | ShouldInvalidateLayoutForBoundsChange + _currentSize cache |
✅ Best — clean, minimal, performant |
| 1 | try-fix | Always return true |
Functional but invalidates on every scroll bounce (wasteful) |
| 2 | try-fix | PrepareLayout() + InvalidateLayout() |
Risky — can cause infinite layout loops |
| 3 | try-fix | Compare CollectionView.Bounds + GetInvalidationContextForBoundsChange |
Complex (57 lines), race condition risk |
Selected Fix: PR's fix — correct, minimal, and consistent with the established pattern.
Platform Coverage
| Platform | Status | Notes |
|---|---|---|
| iOS | ✅ Fixed | Primary platform affected; fix in CV2 iOS handler |
| MacCatalyst | ✅ Should work | Same code path (Items2/iOS compiles for both) |
| Android | ✅ Not affected | Items2 has no Android code |
| CV1 (deprecated) | ✅ Not affected | Items/iOS already has this fix |
Gate Status
❌ BLOCKED by environment — iOS simulator doesn't reproduce the visual rendering regression. Both test runs (with and without fix) pass. This is not a fix quality issue — it's a simulator environment limitation.
Title & Description Review
Title: [iOS][CV2] Fix Rotating the Simulator causes the text on the collection view to disappear.
- The text after "Fix" is a verbatim copy of the issue title rather than describing the fix
- Trailing period should be removed
[CV2]is non-standard but acceptable
Suggested title: [iOS] CollectionView: Fix text disappearing after rotation by invalidating layout on bounds change
Description: Has the NOTE block and basic details. Could benefit from an explicit root cause section.
Recommendations for PR Author
- Fix indentation — Align new method body to use consistent tabs matching the rest of the file
- Add trailing newline to
Issue32435.cstest file - Optional title improvement — Describe the fix rather than repeating the issue title
- These are minor style issues; no correctness problems exist
Key Technical Insights (for future maintainers)
- Always carry over
ShouldInvalidateLayoutForBoundsChangewhen creating newUICollectionViewCompositionalLayoutsubclasses — the base class doesn't auto-invalidate on size changes in all orientations - CV2 vs CV1 parity: When implementing features in
Items2/iOS, cross-checkItems/iOSfor existing solutions to similar problems - ❌ Don't use
PrepareLayout()to callInvalidateLayout()— can cause infinite layout loops - ❌ Don't read
CollectionView.BoundsinsideShouldInvalidateLayoutForBoundsChange— may race with layout system; use cached size instead
📋 Expand PR Finalization Review
Title: ⚠️ Needs Update
Current: [iOS][CV2] Fix Rotating the Simulator causes the text on the collection view to disappear.
Recommended: [iOS] CollectionView2: Invalidate layout on bounds size change to fix text disappearing after rotation
Description: ✅ Good
Description needs updates. See details below.
✨ Suggested PR Description
[!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!
Root Cause
CustomUICollectionViewCompositionalLayout (a subclass of UICollectionViewCompositionalLayout in the CV2 handler) did not override ShouldInvalidateLayoutForBoundsChange. The base implementation does not guarantee returning true when only the size changes (e.g., during device rotation), so cells were not re-measured after orientation change, causing their text to disappear.
This is a .NET 10 regression — the CV2 (Items2/) handler is new and does not include the invalidation logic that the older Items/ handler (which has ItemsViewLayout.ShouldInvalidateLayoutForBoundsChange) already provides. The issue does not reproduce on .NET 9 (9.0.111) which uses the Items/ handler for iOS.
Description of Change
Added ShouldInvalidateLayoutForBoundsChange override in CustomUICollectionViewCompositionalLayout (LayoutFactory2.cs) that:
- Tracks the last-known bounds size in a
_currentSizefield - Returns
true(forcing layout invalidation) when the size has changed — e.g., on rotation - Falls back to the base implementation when the size is unchanged (e.g., scroll position change)
Uses the existing IsCloseTo(CGSize) extension from SizeExtensions for float-safe comparison.
File changed:
src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs— added 15 lines (one field, one method override)
Issues Fixed
Fixes #32435
Platforms Tested
- iOS
- Android
- Windows
- Mac
Code Review: ✅ Passed
Code Review — PR #32664
🟡 Suggestions
1. Mixed Tab/Space Indentation in New Method
File: src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs
Lines: 504–516
The existing class body uses tabs for indentation. The new ShouldInvalidateLayoutForBoundsChange method mixes tabs (for if condition and body) with spaces (for the braces and outer method body). This is visible in the diff:
// Method signature uses tabs (correct)
public override bool ShouldInvalidateLayoutForBoundsChange(CGRect newBounds)
// Opening brace uses 8 spaces instead of tabs (incorrect)
{
Recommendation: Replace spaces with tabs to match the surrounding code style. The full method should be indented with 2 tabs (since it's a member of a class that's inside a namespace):
public override bool ShouldInvalidateLayoutForBoundsChange(CGRect newBounds)
{
if (newBounds.Size.IsCloseTo(_currentSize))
{
return base.ShouldInvalidateLayoutForBoundsChange(newBounds);
}
// Size has changed (e.g., rotation), so we need to invalidate the layout
// to ensure cells are properly measured and displayed
_currentSize = newBounds.Size;
return true;
}2. Trailing Whitespace on Blank Line
File: src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs
Line: 511 (blank line between the if block and the comment)
The diff shows a single space character on this line. It should be a completely empty line.
3. _currentSize Initializes to CGSize.Empty — First Call Always Returns true
File: src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs
Line: 453, 507
_currentSize is a value-type CGSize field that defaults to (0, 0). On the very first call to ShouldInvalidateLayoutForBoundsChange, newBounds.Size.IsCloseTo(CGSize.Empty) will return false for any non-zero bounds, so the method unconditionally returns true and stores the initial size.
This is harmless (the initial layout invalidation is valid), but it means the base class is never consulted on the first call. If this ever needs to be predictable, a bool _initialized guard could be used. As-is, the behavior is acceptable.
4. Android Snapshot Added for an iOS-Only Fix
File: src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCollectionViewTextShouldAppearAfterRotatingTheDevice.png
The fix is in Items2/iOS/LayoutFactory2.cs (iOS/MacCatalyst only). The test is guarded by #if TEST_FAILS_ON_CATALYST && TEST_FAILS_ON_WINDOWS, which means it compiles and runs on both iOS and Android.
Since there's no bug on Android, the Android snapshot just records the baseline appearance. This is not incorrect, but it's slightly confusing — a reader might wonder why there's an Android snapshot for an iOS-only fix. A comment in the test explaining why Android is included would help.
5. Missing Newline at End of Test File
File: src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32435.cs
The file ends without a trailing newline (\ No newline at end of file in the diff). This is a minor style issue — most files in the repo end with a newline.
✅ Looks Good
- Minimal, targeted fix: Only 15 lines added in a focused override. No collateral changes.
- Uses existing extension method:
IsCloseTo(CGSize)fromSizeExtensions(inItems/iOS/) is already used elsewhere in the Items handlers for exactly this kind of comparison. - Test reproduces the bug correctly: The test rotates to landscape then back to portrait (mirrors the exact steps from the issue report) and verifies with a screenshot.
- No impact on non-rotation paths: The guard
if (newBounds.Size.IsCloseTo(_currentSize))ensures only actual size changes (not scroll-position-driven bounds changes) trigger the invalidation, preventing performance regression. PlatformAffected.iOSon HostApp[Issue]attribute is correct — the bug only affects iOS.
kubaflo
left a comment
There was a problem hiding this comment.
Could you please resolve conflicts?
1ed60b9 to
2eb959f
Compare
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 32664Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 32664" |
@kubaflo , I have resolved the conflicts |
|
/review -b feature/refactor-copilot-yml |
1 similar comment
|
/review -b feature/refactor-copilot-yml |
|
/review -b feature/enhanced-reviewer -p ios |
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 3 findings
See inline comments for details.
kubaflo
left a comment
There was a problem hiding this comment.
Could you please check the ai's suggestions, and resolve conflicts?
2eb959f to
609eb1c
Compare
@kubaflo , I have addressed the AI suggestion and resolved the conflicts. |
|
/review -b feature/enhanced-reviewer -p ios |
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 3 findings
See inline comments for details.
| // Size has changed (e.g., rotation), so we need to invalidate the layout | ||
| // to ensure cells are properly measured and displayed | ||
| _currentSize = newBounds.Size; | ||
| return true; |
There was a problem hiding this comment.
[major] CollectionView iOS/MacCatalyst — Returning true invalidates the compositional layout, but it leaves CollectionViewHandler2’s MeasureFirstItem cache intact. TemplatedCell2 reuses that cached first-item size after a bounds change, so rotations or split-view resizes can still lay out cells with the pre-rotation measurement for the default MeasureFirstItem strategy. Please clear the cached first-item size when the bounds size changes before invalidating the layout.
| App.Tap("AddButton"); | ||
| App.SetOrientationLandscape(); | ||
| App.SetOrientationPortrait(); | ||
| VerifyScreenshot(); |
There was a problem hiding this comment.
[moderate] Regression Prevention — The screenshot is captured immediately after two orientation changes. SetOrientationPortrait() only sends the command; it does not wait for the rotation/layout pass to settle, and nearby rotation screenshot tests use VerifyScreenshot(..., retryTimeout: TimeSpan.FromSeconds(2)) for this reason. Without a retry this regression test can snapshot mid-rotation and become flaky on slower iOS simulators.
| @@ -0,0 +1,24 @@ | |||
| #if TEST_FAILS_ON_CATALYST && TEST_FAILS_ON_WINDOWS //Issue reproduce only when rotating device. | |||
There was a problem hiding this comment.
[moderate] Regression Prevention — This guard also compiles the test into Android because the Android test project defines both TEST_FAILS_ON_CATALYST and TEST_FAILS_ON_WINDOWS, even though the product fix is iOS Items2-only and the issue is marked iOS. That adds an Android screenshot baseline for an unrelated platform and can fail on Android rendering/orientation differences which this PR does not change; scope the regression to #if IOS (or otherwise document why Android coverage is intentional).
MauiBot
left a comment
There was a problem hiding this comment.
AI Review Summary
@devanathan-vaithiyanathan — new AI review results are available based on this last commit:
1353866. 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: bb4e7040
| Test | Without Fix (expect FAIL) | With Fix (expect PASS) |
|---|---|---|
🖥️ Issue32435 Issue32435 |
✅ FAIL — 225s | ✅ PASS — 94s |
🔴 Without fix — 🖥️ Issue32435: FAIL ✅ · 225s
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 461 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 472 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 4.46 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Foldable/src/Controls.Foldable.csproj (in 5.15 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj (in 5.16 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/maps/src/Maps.csproj (in 5.16 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 5.16 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 5.16 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 5.16 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 5.17 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 5.17 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.14376862
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.14376862
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.14376862
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.14376862
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.14376862
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.14376862
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14376862
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14376862
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14376862
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:59.46
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Core/UITest.Core.csproj (in 515 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/VisualTestUtils/VisualTestUtils.csproj (in 515 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/CustomAttributes/Controls.CustomAttributes.csproj (in 515 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 515 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 536 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 542 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 566 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 585 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 1.7 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Analyzers/UITest.Analyzers.csproj (in 2.22 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/VisualTestUtils.MagickNet/VisualTestUtils.MagickNet.csproj (in 2.17 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.iOS.Tests/Controls.TestCases.iOS.Tests.csproj (in 2.19 sec).
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14376862
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.14376862
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.14376862
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.14376862
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.05] Discovering: Controls.TestCases.iOS.Tests
[xUnit.net 00:00:00.14] 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/15/2026 4:36:23 AM FixtureSetup for Issue32435(iOS)
>>>>> 6/15/2026 4:36:27 AM VerifyCollectionViewTextShouldAppearAfterRotatingTheDevice Start
>>>>> 6/15/2026 4:36:31 AM VerifyCollectionViewTextShouldAppearAfterRotatingTheDevice Stop
>>>>> 6/15/2026 4:36:31 AM Log types: syslog, crashlog, performance, safariConsole, safariNetwork, server
Failed VerifyCollectionViewTextShouldAppearAfterRotatingTheDevice [3 s]
Error Message:
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: VerifyCollectionViewTextShouldAppearAfterRotatingTheDevice.png (1.85% 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.Issue32435.VerifyCollectionViewTextShouldAppearAfterRotatingTheDevice() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32435.cs:line 21
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/Issue32435.trx
Test Run Failed.
Total tests: 1
Failed: 1
Total time: 1.1145 Minutes
>>> TRX_RESULT_FILE: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue32435.trx
🟢 With fix — 🖥️ Issue32435: PASS ✅ · 94s
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 313 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 321 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 325 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 354 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 367 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.14376862
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.14376862
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.14376862
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.14376862
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.14376862
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.14376862
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14376862
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14376862
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14376862
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
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:00:46.42
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 378 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 379 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 369 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 398 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 422 ms).
8 of 13 projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.90-ci+azdo.14376862
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.14376862
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.14376862
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.14376862
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
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.04] Discovering: Controls.TestCases.iOS.Tests
[xUnit.net 00:00:00.15] 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/15/2026 4:37:59 AM FixtureSetup for Issue32435(iOS)
>>>>> 6/15/2026 4:38:03 AM VerifyCollectionViewTextShouldAppearAfterRotatingTheDevice Start
>>>>> 6/15/2026 4:38:05 AM VerifyCollectionViewTextShouldAppearAfterRotatingTheDevice Stop
Passed VerifyCollectionViewTextShouldAppearAfterRotatingTheDevice [2 s]
NUnit Adapter 4.5.0.0: Test execution complete
Results File: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue32435.trx
Test Run Successful.
Total tests: 1
Passed: 1
Total time: 21.4433 Seconds
>>> TRX_RESULT_FILE: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue32435.trx
📁 Fix files reverted (2 files)
eng/pipelines/ci-copilot.ymlsrc/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs
UI Tests — CollectionView
Detected UI test categories: CollectionView
❌ Deep UI tests — 331 passed, 87 failed across 1 category on platform-pool agent (replaces in-process counts above).
🧪 UI Test Execution Results (deep, platform pool)
| Category | Tests | Snapshot diffs |
|---|---|---|
CollectionView |
331/421 (87 ❌) | 85 diff PNGs |
❌ CollectionView — 87 failed tests
VerifyDataTemplateParentIsNotNull
System.InvalidOperationException :
Snapshot different than baseline: VerifyDataTemplateParentIsNotNull.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: VerifyDataTemplateParentIsNotNull.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
...
BottomSheetDetentHeightIsCorrectWhenCollectionViewIsMeasuredBeforeMount
System.InvalidOperationException :
Snapshot different than baseline: BottomSheetDetentHeightIsCorrectWhenCollectionViewIsMeasuredBeforeMount.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: BottomSheetDetentHeightIsCorrectWhenCollectionViewIsMeasuredBeforeMount.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baselin
...
VerticalItemsRemainFullyVisibleAfterChangingSpacing
System.InvalidOperationException :
Snapshot different than baseline: VerticalItemsRemainFullyVisibleAfterChangingSpacing.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: VerticalItemsRemainFullyVisibleAfterChangingSpacing.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), then
...
VerifyScrollToByItemWithCenterPositionAndVerticalList_Carrot
System.InvalidOperationException :
Snapshot different than baseline: VerifyScrollToByItemWithCenterPositionAndVerticalList_Carrot.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: VerifyScrollToByItemWithCenterPositionAndVerticalList_Carrot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this is
...
Issue18751Test
System.InvalidOperationException :
Snapshot different than baseline: Issue18751Test.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: Issue18751Test.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 arti
...
RightToLeftFlowDirectionShouldWork
System.InvalidOperationException :
Snapshot different than baseline: RightToLeftFlowDirectionShouldWork.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: RightToLeftFlowDirectionShouldWork.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
...
VerifyScrollToByItemWithEndPositionAndVerticalList_Carrot
System.InvalidOperationException :
Snapshot different than baseline: VerifyScrollToByItemWithEndPositionAndVerticalList_Carrot.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: VerifyScrollToByItemWithEndPositionAndVerticalList_Carrot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a
...
VerifyScrollToByItemWithMakeVisiblePositionAndVerticalList_Carrot
System.InvalidOperationException :
Snapshot different than baseline: VerifyScrollToByItemWithMakeVisiblePositionAndVerticalList_Carrot.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: VerifyScrollToByItemWithMakeVisiblePositionAndVerticalList_Carrot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has change
...
CollectionViewPreSelectionShouldUpdate
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewPreSelectionShouldUpdate.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: CollectionViewPreSelectionShouldUpdate.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
...
VerifyModelItemsObservableCollectionWhenMultipleModePreSelection
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.CollectionView_ItemsSourceFeatureTests.VerifyModelItemsObservableCollectionWhenMultipleModePreSelection() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ItemsSourceFeatureTests.cs:line 674
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.MethodBaseInvok
...
CollectionViewWithFallbackVauleShouldUpdateAtRunTime
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewWithFallbackVauleShouldUpdateAtRunTime.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: CollectionViewWithFallbackVauleShouldUpdateAtRunTime.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bug), th
...
CollectionViewAddGroupWhenViewIsEmpty
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewAddGroupWhenViewIsEmpty.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: CollectionViewAddGroupWhenViewIsEmpty.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.
...
VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection
System.InvalidOperationException :
Snapshot different than baseline: VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.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: VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has ch
...
VerifyModelItemsObservableCollectionWhenSingleModePreSelection
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.CollectionView_ItemsSourceFeatureTests.VerifyModelItemsObservableCollectionWhenSingleModePreSelection() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ItemsSourceFeatureTests.cs:line 652
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
...
VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList
System.InvalidOperationException :
Snapshot different than baseline: VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList.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: VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bu
...
VerifySelectionModeMultipleWhenProgrammaticSelectionWorksWithVerticalList
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.CollectionView_SelectionFeatureTests.VerifySelectionModeMultipleWhenProgrammaticSelectionWorksWithVerticalList() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_SelectionFeatureTests.cs:line 533
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.MethodBase
...
VerifyModelItemsGroupedListWhenMultipleModePreSelection
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.CollectionView_ItemsSourceFeatureTests.VerifyModelItemsGroupedListWhenMultipleModePreSelection() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ItemsSourceFeatureTests.cs:line 774
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.Interp
...
SingleItemAlignmentInCollectionViewHorizontalGridLayout
System.InvalidOperationException :
Snapshot different than baseline: SingleItemAlignmentInCollectionViewHorizontalGridLayout.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: SingleItemAlignmentInCollectionViewHorizontalGridLayout.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a bu
...
VerifyCollectionViewEmptyView
System.InvalidOperationException :
Snapshot different than baseline: VerifyCollectionViewEmptyView.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: VerifyCollectionViewEmptyView.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 attachm
...
CollectionViewMeasureFirstItem
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewMeasureFirstItem.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: CollectionViewMeasureFirstItem.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
...
CollectionViewSelectionChangesVisualState
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewSelectionChangesVisualState.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: CollectionViewSelectionChangesVisualState.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
...
RefreshShouldNotChangeSize
System.InvalidOperationException :
Snapshot different than baseline: RefreshShouldNotChangeSize.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: RefreshShouldNotChangeSize.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
...
CollectionViewHeaderSizewithIsVisibleBinding
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewHeaderSizewithIsVisibleBinding.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: CollectionViewHeaderSizewithIsVisibleBinding.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 ba
...
VerifyScrollToByIndexWithCenterPositionAndVerticalList_Carrot
System.InvalidOperationException :
Snapshot different than baseline: VerifyScrollToByIndexWithCenterPositionAndVerticalList_Carrot.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: VerifyScrollToByIndexWithCenterPositionAndVerticalList_Carrot.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this
...
CollectionViewDuplicateViewsWhenAddItemToGroup
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewDuplicateViewsWhenAddItemToGroup.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: CollectionViewDuplicateViewsWhenAddItemToGroup.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
...
FooterWithEmptyCVShouldHaveCorrectSize
System.InvalidOperationException :
Snapshot different than baseline: FooterWithEmptyCVShouldHaveCorrectSize.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: FooterWithEmptyCVShouldHaveCorrectSize.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
...
CollectionViewShouldChangeItemsLayout
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewShouldChangeItemsLayout.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: CollectionViewShouldChangeItemsLayout.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.
...
VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection
System.InvalidOperationException :
Snapshot different than baseline: VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.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: VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct basel
...
CheckEmptyViewMargin
System.InvalidOperationException :
Snapshot different than baseline: CheckEmptyViewMargin.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: CheckEmptyViewMargin.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 th
...
HeaderAndFooterShouldBeVisible
System.InvalidOperationException :
Snapshot different than baseline: HeaderAndFooterShouldBeVisible.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: HeaderAndFooterShouldBeVisible.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
...
(+57 more — see TRX in artifact)
📎 Download drop-deep-uitests artifact (TRX + snapshot diffs)
Pre-Flight — Context & Validation
Issue: #32435 - [.NET 10]I1_Add_Items_Linear_Layout - Rotating the Simulator causes the text on the collection view to disappear.
PR: #32664 - [iOS][CV2] Fix Rotating the Simulator causes the text on the collection view to disappear.
Platforms Affected: iOS
Files Changed: 1 implementation, 5 test/snapshot
Key Findings
- Issue #32435 repros on iOS 26 with CollectionView2 horizontal layout: after adding an item and rotating, item text disappears until another item update forces layout work.
- PR production fix modifies
src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs, the active iOS/MacCatalyst Items2 CollectionView handler path. - Gate was already completed before this phase: without fix the iOS Issue32435 test fails; with the PR fix it passes.
- Code review found the regression test still includes Android even though the production fix is iOS-only.
- Code review also found the PR's layout invalidation does not clear the
MeasureFirstItemfirst-item size cache on bounds-size changes.
Code Review Summary
Verdict: NEEDS_CHANGES
Confidence: low
Errors: 1 | Warnings: 2 | Suggestions: 0
Key code review findings:
- ❌
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32435.cs:1— regression test runs on Android for an iOS-only Items2/iOS production fix. ⚠️ src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32435.cs:19-21— screenshot is captured immediately after orientation changes and may be flaky before layout settles.⚠️ src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs:569— size-change invalidation does not clear theMeasureFirstItemcached first item size.
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #32664 | Override CustomUICollectionViewCompositionalLayout.ShouldInvalidateLayoutForBoundsChange and return true when bounds size changes. |
✅ PASSED (Gate) | LayoutFactory2.cs |
Original PR fix; does not clear first-item measurement cache. |
Code Review — Deep Analysis
Code Review — PR #32664
Independent Assessment
What this changes: Adds an iOS/MacCatalyst UICollectionViewCompositionalLayout.ShouldInvalidateLayoutForBoundsChange override for the Items2 CollectionView layout so size changes, such as rotation, invalidate layout. Adds a regression HostApp page, Appium screenshot test, and Android/iOS baselines.
Inferred motivation: Fix a CollectionView2 rotation regression where horizontally laid-out item text disappears until another item update forces layout work.
Reconciliation with PR Narrative
Author claims: The PR fixes iOS 26 text disappearance after simulator rotation by invalidating layout on bounds changes, with issue #32435 coverage.
Agreement/disagreement: The production change matches the stated root cause at a high level. The test coverage does not fully match the claimed iOS-only fix because it also runs on Android, where this production code is not used.
Prior Review Reconciliation
| Prior ❌ Error Finding | Source | Status | Evidence |
|---|---|---|---|
Missing ios-26 screenshot baseline |
MauiBot review / inline comments | ✅ Fixed | Current PR includes src/Controls/tests/TestCases.iOS.Tests/snapshots/ios-26/VerifyCollectionViewTextShouldAppearAfterRotatingTheDevice.png. |
| Gate/test did not reliably validate the fix; Android passed without the iOS fix / with-fix run failed | MauiBot review summaries | ❌ Unresolved | Current test still uses #if TEST_FAILS_ON_CATALYST && TEST_FAILS_ON_WINDOWS, includes Android, and still snapshots immediately after rotation. |
| Android scope for an iOS-only Items2/iOS production fix | MauiBot inline comments | ❌ Unresolved | Issue32435.cs:1 still compiles outside iOS and an Android snapshot is still added. |
Blast Radius Assessment
- Runs for all instances: Yes, for Items2 iOS/MacCatalyst CollectionView list/grid layouts and vertical CarouselView snap layouts using
CustomUICollectionViewCompositionalLayout; every bounds-size change can now invalidate layout. - Startup impact: No direct startup path; runs during collection layout/bounds changes.
- Static/shared state: No static state.
_currentSizeis instance state scoped to the layout.
CI Status
- Required-check result: undetermined via required-check command.
- Classification:
gh pr checks 32664 --repo dotnet/maui --requiredfailed becauseghis unauthenticated. Public check-run API for head SHA13538663d66b...showsmaui-prand related check runs completed successfully, but required-check status could not be verified with the mandated command. - Action taken: capped confidence due required-check tool unavailability.
Findings
❌ Error — Regression test runs on Android for an iOS-only fix
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32435.cs:1
The production fix is only in src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs, and the issue is marked PlatformAffected.iOS, but the test conditional is #if TEST_FAILS_ON_CATALYST && TEST_FAILS_ON_WINDOWS. Existing usage means this includes mobile platforms such as Android, and this PR also adds an Android snapshot.
That makes the regression gate invalid: Android can pass with or without the iOS layout fix, so the test does not prove the changed code catches the bug. Prior reviews already observed this gate failure mode, and it remains unresolved. Scope this test to iOS, e.g. #if IOS, unless Android behavior is intentionally being fixed too.
⚠️ Warning — Screenshot is captured before rotation layout is allowed to settle
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32435.cs:19-21
The test calls SetOrientationLandscape(), SetOrientationPortrait(), then immediately VerifyScreenshot(). Rotation and compositional layout invalidation are asynchronous enough that this can capture during transition/relayout rather than after the final layout. Prefer re-waiting for a stable element and using VerifyScreenshot(retryTimeout: TimeSpan.FromSeconds(2)), consistent with newer orientation screenshot tests.
⚠️ Warning — Size-change invalidation does not clear MeasureFirstItem cache
src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs:569
When bounds size changes, the new override updates _currentSize and returns true, but it does not clear CollectionViewHandler2’s cached first item size used by ItemSizingStrategy.MeasureFirstItem. TemplatedCell2 reuses that cached size even when constraints change. A rotation/window resize with MeasureFirstItem can therefore keep stale dimensions after the new invalidation path runs. The legacy Items1 layout updates constraints and clears sizing caches on bounds changes.
Failure-Mode Probing
- What happens on platforms not using Items2/iOS? The test can still run on Android, but the production fix cannot affect Android, so the regression proof is invalid.
- What happens during rotation before layout settles? The screenshot can be taken before the final CollectionView layout pass, making the test flaky or falsely failing.
- What happens with
MeasureFirstItemafter size changes? Layout invalidates, but the first-item measured size cache can remain stale. - What happens on handler reconnect/disconnect? No new subscriptions or static state are introduced; layout state is instance-scoped.
Verdict: NEEDS_CHANGES
Confidence: low, because required-check status could not be collected through authenticated gh pr checks --required, and prior gate failures remain relevant.
Summary: The production approach is plausible for the reported iOS rotation issue, but the regression test still runs where the fix cannot apply and can pass without validating the changed code. The test should be scoped to iOS and stabilized after rotation before this is ready.
Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | maui-expert-reviewer | Detect Items2 iOS CollectionView.Bounds.Size changes in ItemsViewController2, clear MeasureFirstItem cache, and invalidate layout. |
✅ PASS | 1 file | Addresses stale first-item measurement cache; broader controller lifecycle invalidation. |
| PR | PR #32664 | Override CustomUICollectionViewCompositionalLayout.ShouldInvalidateLayoutForBoundsChange when bounds size changes. |
✅ PASSED (Gate) | 1 file | Original PR; layout-local but leaves measurement cache intact. |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| gpt-5.5 / maui-expert-reviewer | 1 | Yes | Controller-level bounds-size detection with cache clear. |
Exhausted: No — stopped because candidate #1 passed all targeted iOS tests and is demonstrably stronger than the PR fix for the stale MeasureFirstItem cache failure mode.
Selected Fix: Candidate #1 — It passes the same iOS regression test as the PR fix and additionally clears MAUI measurement cache state on bounds-size changes.
Report — Final Recommendation
Comparative Candidate Report — PR #32664
Inputs Compared
| Candidate | Source | Regression result | Summary |
|---|---|---|---|
pr |
Raw PR #32664 | ✅ Passed gate | Adds layout invalidation from CustomUICollectionViewCompositionalLayout.ShouldInvalidateLayoutForBoundsChange on bounds-size changes. |
pr-plus-reviewer |
PR plus expert reviewer feedback in sandbox copy | Not re-run; composed from passing PR fix plus reviewer feedback | Keeps PR layout invalidation, adds controller-level MeasureFirstItem cache clearing on bounds-size changes, scopes the UI test to iOS, and adds screenshot retry. |
try-fix-1 |
STEP 5a candidate | ✅ Passed targeted iOS test | Moves the bounds-size response to ItemsViewController2.ViewWillLayoutSubviews(), clears MeasureFirstItem cache, and invalidates layout. |
No candidate in the available STEP 5a results failed regression tests. If any failed candidate existed, it would rank below the passing candidates per the requested rule.
Candidate Analysis
pr
Strengths:
- Minimal and localized to
LayoutFactory2.cs. - Gate evidence shows the iOS Issue32435 test fails without the fix and passes with it.
Weaknesses:
- Does not clear
CollectionViewHandler2's first-item measurement cache forItemSizingStrategy.MeasureFirstItem. - The regression test runs outside the iOS Items2 production path and can snapshot immediately after rotation, making the test weaker than the production claim.
Rank: 3
try-fix-1
Strengths:
- Passed the same targeted iOS regression test.
- Directly addresses the stronger root-cause model by clearing the cached first-item size when bounds size changes.
- Does not depend solely on UIKit calling
ShouldInvalidateLayoutForBoundsChange.
Weaknesses:
- Broader invalidation point:
ViewWillLayoutSubviews()runs for every Items2 iOS/MacCatalyst CollectionView controller. - Does not include the reviewer-applied test scope and screenshot stabilization improvements as part of the candidate diff.
Rank: 2
pr-plus-reviewer
Strengths:
- Preserves the PR's already gate-passing layout invalidation.
- Adds the key technical improvement from
try-fix-1: clearMeasureFirstItemcache on real bounds-size changes and invalidate the active collection layout. - Fixes the expert reviewer's test-quality findings by making the regression iOS-only and adding screenshot retry after rotation.
Weaknesses:
- It has slightly more invalidation overlap than
try-fix-1because both the layout override and controller hook can invalidate on a size change. - The combined sandbox candidate was not gate-run per the instruction not to re-run gate verification; only patch-shape validation was performed.
Rank: 1
Winner
pr-plus-reviewer is the winning candidate.
It retains the raw PR's proven gate behavior while addressing all actionable expert-review findings. It is stronger than try-fix-1 because it includes the same cache-clear improvement plus the test-scope and screenshot-stability fixes, and it is stronger than pr because it closes the stale MeasureFirstItem cache gap.
Future Action — review latest findings
No alternative fix was selected for this run. Review the session findings and CI results before merging.
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 26, text in horizontal CollectionView items disappears after rotation because the layout isn’t invalidated when bounds change.
Description of Change
Added ShouldInvalidateLayoutForBoundsChange override in LayoutFactory2.cs to refresh the layout on size changes, ensuring proper cell re-measurement and visible text after rotation.
Issues Fixed
Fixes #32435
Tested the behavior in the following platforms.