[iOS] Fix CarouselView CurrentItem not updating with vertical LinearItemsLayout#32699
[iOS] Fix CarouselView CurrentItem not updating with vertical LinearItemsLayout#32699Shalini-Ashokan wants to merge 7 commits into
Conversation
|
Hey there @@Shalini-Ashokan! Thank you so much for your PR! Someone from the team will get assigned to your PR shortly and we'll get it reviewed. |
c35657a to
b8d4238
Compare
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
There was a problem hiding this comment.
Pull Request Overview
This PR fixes a bug in CarouselView where the CurrentItem property does not update correctly when using LinearItemsLayout with vertical orientation on iOS. The root cause was that page calculations always used horizontal scroll offset (offset.X) regardless of scroll orientation.
Key Changes:
- Modified page calculation to use vertical scroll offset (
offset.Y) for vertical orientation - Implemented a 10% tolerance threshold for vertical scrolling (compared to epsilon for horizontal) to handle iOS-specific scroll settling behavior
- Added comprehensive UI test coverage for vertical CarouselView scrolling
Reviewed Changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs | Fixed page calculation to use offset.Y for vertical orientation and added tolerance threshold for vertical scroll position detection |
| src/Controls/tests/TestCases.HostApp/Issues/Issue32136.cs | Added test page with vertical CarouselView demonstrating CurrentItem binding and programmatic scrolling |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32136.cs | Added UI test to verify CurrentItem updates correctly when scrolling vertical CarouselView |
|
/rebase |
7cd4e26 to
2260452
Compare
PureWeen
left a comment
There was a problem hiding this comment.
I pushed up some test code in the sandbox
The current looping behavior in the sandbox seems to be super broken with CarouselView2
Is that because of this change? or is there a different PR to fix?
like if you scroll the CarouselView past the last item it snaps in a broken way
🤖 AI Summary📊 Expand Full Review🔍 Pre-Flight — Context & Validation📝 Review Session — - push up test code ·
|
| File | Type | Description |
|---|---|---|
src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs |
Fix | Core fix: orientation-aware page calculation + 10% threshold for vertical |
src/Controls/tests/TestCases.HostApp/Issues/Issue32136.cs |
Test | HostApp page with CarouselView2 (vertical), scroll button |
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32136.cs |
Test | NUnit UI test taps ScrollButton, verifies CurrentItemLabel |
src/Controls/samples/Controls.Sample.Sandbox/MainPage.xaml |
Sandbox | |
src/Controls/samples/Controls.Sample.Sandbox/MainPage.xaml.cs |
Sandbox | |
src/Controls/samples/Controls.Sample.Sandbox/MauiProgram.cs |
Sandbox |
PR Discussion Summary
| Reviewer | Comment | Status |
|---|---|---|
| copilot-pull-request-reviewer | [nitpick] Improve comment explaining why 10% threshold vs double.Epsilon | ✅ Resolved |
| sheiksyedm | Triggered /azp run CI |
- |
| PureWeen | /rebase command |
- |
Key Concerns
- Sandbox files committed - PR includes modifications to Sandbox app (MainPage.xaml, MainPage.xaml.cs, MauiProgram.cs) which are developer testing artifacts and should not be committed to the repo
- Test timing - UI test does
App.WaitForElement("CurrentItemLabel").GetText()immediately after tap without waiting for scroll animation to complete - could be flaky - 10% threshold - The 0.1 (10%) hardcoded threshold for vertical scroll may be too broad/narrow depending on content size
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #32699 | Use offset.Y for vertical orientation; add 10% threshold for vertical scroll settlement |
⏳ PENDING (Gate) | LayoutFactory2.cs (+13, -2) |
Original PR |
🚦 Gate — Test Verification
📝 Review Session — - push up test code · c8b61a9
Result: ✅ PASSED
Platform: ios
Mode: Full Verification
- Tests FAIL without fix ✅
- Tests PASS with fix ✅
Details
- Fix file verified:
src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs - Test class:
Issue32136.CurrentItemShouldUpdateWhenScrollingVerticalCarouselView - Test category:
CarouselView
Run 1 (WITHOUT fix): Build succeeded, test FAILED as expected (bug present)
Run 2 (WITH fix): Build succeeded, test PASSED (bug fixed)
Full report: CustomAgentLogsTmp/PRState/32699/PRAgent/gate/verify-tests-fail/verification-report.md
🔧 Fix — Analysis & Comparison
📝 Review Session — - push up test code · c8b61a9
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #32699 | Use offset.Y for vertical orientation; add 10% threshold for vertical scroll settlement |
✅ PASS (Gate) | LayoutFactory2.cs (+13, -2) |
Original PR |
Exhausted: No — try-fix models were blocked due to AI model rate limits after 1 retry attempt
Selected Fix: PR's fix — It is the only empirically validated solution (Gate confirmed: tests fail without it, pass with it)
Blocked Reason: Task agents returned 429 rate limit errors on both attempts to invoke try-fix with claude-sonnet-4.5.
📋 Report — Final Recommendation
📝 Review Session — - push up test code · c8b61a9
⚠️ Final Recommendation: REQUEST CHANGES
Summary
PR #32699 fixes a real bug in CarouselViewHandler2 (iOS) where vertical CarouselView never updated CurrentItem. The core fix in LayoutFactory2.cs is correct and empirically verified (Gate ✅). However, the PR includes Sandbox testing files that must be removed, and there's a pre-existing loop handling bug exposed by enabling vertical support.
Root Cause
In LayoutFactory2.cs's VisibleItemsInvalidationHandler, the page calculation used offset.X (horizontal scroll offset) unconditionally. For vertical CarouselView, offset.X is always 0, so page = 0 / height = 0, and page % 1 == 0 → the handler would fire immediately and set position to 0. This meant vertical scrolling never correctly updated CurrentItem.
Fix Quality
The fix modifies the page calculation to use offset.Y for vertical orientation and adds a 10% tolerance threshold to account for vertical scrolling having no auto-centering paging behavior (unlike horizontal which uses GroupPagingCentered). The approach is sound and minimal.
Issues Found
🔴 Required Changes
1. Sandbox files must be removed from the PR
The PR includes modifications to 3 Sandbox files:
src/Controls/samples/Controls.Sample.Sandbox/MainPage.xamlsrc/Controls/samples/Controls.Sample.Sandbox/MainPage.xaml.cssrc/Controls/samples/Controls.Sample.Sandbox/MauiProgram.cs
These are developer testing scaffolding that should not be committed. The Sandbox is a shared resource for testing and these changes would confuse other contributors. The contributor should revert these files to their original state.
2. Loop handling for vertical orientation uses wrong scroll position
In the loop repositioning code (lines ~394-396):
cv2Controller.CollectionView.ScrollToItem(
NSIndexPath.FromItemSection(pageIndex, 0),
UICollectionViewScrollPosition.Left, // ⚠️ Wrong for vertical!
false);For vertical orientation, the scroll position should be .Top not .Left. The current loop test (Loop = false) doesn't exercise this path, but vertical Loop = true scenarios will behave incorrectly. This is pre-existing code, but by making vertical CarouselView functional, this PR exposes the issue.
Suggested fix:
cv2Controller.CollectionView.ScrollToItem(
NSIndexPath.FromItemSection(pageIndex, 0),
isHorizontal ? UICollectionViewScrollPosition.Left : UICollectionViewScrollPosition.Top,
false);🟡 Suggested Improvements
3. Test timing - could be flaky
The UI test taps the scroll button and immediately reads the label text:
App.Tap("ScrollButton");
var currentItemText = App.WaitForElement("CurrentItemLabel").GetText();
Assert.That(currentItemText, Is.EqualTo("CurrentItem = Capuchin Monkey"));After the tap, the label shows "Button was clicked" (set synchronously), then "CurrentItem = Capuchin Monkey" (set after async scroll animation). The test relies on Appium latency exceeding animation duration. Consider using a text-specific wait or reducing animation:
App.Tap("ScrollButton");
App.WaitForElement(e => e.Marked("CurrentItemLabel").Text("CurrentItem = Capuchin Monkey"));Gate Verification
| Check | Result |
|---|---|
| Tests FAIL without fix | ✅ Confirmed |
| Tests PASS with fix | ✅ Confirmed |
| Platform | iOS |
| Test | Issue32136.CurrentItemShouldUpdateWhenScrollingVerticalCarouselView |
Try-Fix Phase
Code Review Notes
| File:Line | Issue | Severity |
|---|---|---|
LayoutFactory2.cs:395 |
UICollectionViewScrollPosition.Left should be .Top for vertical loop repositioning |
🔴 Required |
Controls.Sample.Sandbox/MainPage.xaml |
Sandbox files should not be in PR | 🔴 Required |
Controls.Sample.Sandbox/MainPage.xaml.cs |
Sandbox files should not be in PR | 🔴 Required |
Controls.Sample.Sandbox/MauiProgram.cs |
Sandbox files should not be in PR | 🔴 Required |
TestCases.Shared.Tests/Issue32136.cs:21 |
Test may be timing-sensitive - no wait for expected text | 🟡 Suggested |
📋 Expand PR Finalization Review
Title: ✅ Good
Current: [iOS] Fix CarouselView CurrentItem not updating with vertical LinearItemsLayout
Description: ⚠️ Needs Update
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
In CarouselViewHandler2 (Items2/iOS/LayoutFactory2.cs), the VisibleItemsInvalidationHandler callback always used offset.X (horizontal scroll offset) to calculate the current page index, regardless of the CarouselView's scroll orientation. For a vertical LinearItemsLayout, the scroll position is tracked via offset.Y, so the page index was always computed incorrectly — causing CurrentItem to never update.
Additionally, horizontal CarouselView uses UICollectionLayoutSectionOrthogonalScrollingBehavior.GroupPagingCentered which auto-snaps to exact page boundaries (allowing a near-zero epsilon threshold). Vertical CarouselView uses .None scrolling behavior — the user's finger release position determines where the scroll settles, which may not land on an exact boundary. A 10% tolerance threshold is used to accept vertical scroll positions near page boundaries.
Description of Change
Modified LayoutFactory2.cs (CreateCarouselLayout) to use orientation-aware page calculation:
- When
isHorizontalistrue: usesoffset.X(existing behavior, unchanged) - When
isHorizontalisfalse: usesoffset.Y(new behavior)
Also introduced a per-orientation pageThreshold:
- Horizontal:
double.Epsilon * 100(essentially exact match, since paging auto-centers) - Vertical:
0.1(10% tolerance, since vertical scroll has no auto-centering)
This fix only affects CarouselViewHandler2 (Items2/iOS/) — the iOS/MacCatalyst handler. The legacy CarouselViewHandler (Items/) is not affected.
Issues Fixed
Fixes #32136
Platforms Tested
- Android (not affected — Items2 is iOS/MacCatalyst only)
- Windows (not affected — Items2 is iOS/MacCatalyst only)
- iOS
- Mac (MacCatalyst)
Code Review: ⚠️ Issues Found
Code Review — PR #32699
🔴 Critical Issues
1. Sandbox debug/test code must be reverted before merge
Files:
src/Controls/samples/Controls.Sample.Sandbox/MainPage.xamlsrc/Controls/samples/Controls.Sample.Sandbox/MainPage.xaml.cssrc/Controls/samples/Controls.Sample.Sandbox/MauiProgram.cs
Problem: These three files contain test/debug code added during development to manually reproduce and validate the issue. They should not be committed to the main branch. Specifically:
MainPage.xaml/MainPage.xaml.cs: Replaces the default empty Sandbox page with a vertical CarouselView test harness containing extensiveConsole.WriteLinedebug logging.MauiProgram.cs: Adds aUseHandler2boolean toggle to forceCarouselViewHandler(legacy) vs the defaultCarouselViewHandler2, with#if IOS || MACCATALYSTconditional registration. This is a development-only toggle.
Recommendation: Revert all three Sandbox files to their original state before merging:
git checkout origin/main -- src/Controls/samples/Controls.Sample.Sandbox/MainPage.xaml
git checkout origin/main -- src/Controls/samples/Controls.Sample.Sandbox/MainPage.xaml.cs
git checkout origin/main -- src/Controls/samples/Controls.Sample.Sandbox/MauiProgram.cs🟡 Suggestions
2. UI test may be flaky — missing wait after async scroll animation
File: src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32136.cs
Code:
App.WaitForElement("ScrollButton");
App.Tap("ScrollButton");
var currentItemText = App.WaitForElement("CurrentItemLabel").GetText();
Assert.That(currentItemText, Is.EqualTo("CurrentItem = Capuchin Monkey"));Problem: After App.Tap("ScrollButton"), ScrollTo(..., animate: true) is called in the HostApp. The scroll animation is asynchronous — CurrentItemLabel is only updated in the CurrentItemChanged event, which fires after the scroll completes. App.WaitForElement("CurrentItemLabel") will return immediately (the element already exists) without waiting for its text to change.
Recommendation: Wait for the label text to change rather than just for the element to exist:
App.WaitForElement("ScrollButton");
App.Tap("ScrollButton");
// Wait for label text to update after async scroll completes
App.WaitForElement(e => e.Marked("CurrentItemLabel") && e.HasText("CurrentItem = Capuchin Monkey"));
Assert.That(App.FindElement("CurrentItemLabel").GetText(), Is.EqualTo("CurrentItem = Capuchin Monkey"));Or use a polling approach with a timeout. Without this, the test may pass immediately with the initial text ("CurrentItem = Baboon") or fail intermittently.
3. Threshold comment could be more precise
File: src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs, line 358–360
Current comment:
// Vertical: Scroll stops wherever touch is released (no auto-centering), so use 0.1 (10%) threshold
// to accept positions near page boundaries where scroll naturally settlesNote: A Copilot reviewer already suggested a more precise comment (PR review thread, resolved). The suggestion clarifies why horizontal uses epsilon (UIKit GroupPagingCentered auto-snaps) vs why vertical needs 10% (.None scroll behavior, finger-release position). Consider applying that suggestion.
✅ Looks Good
- Core fix is correct and minimal — The
LayoutFactory2.cschange (13 lines) correctly addresses the root cause. Usingoffset.Yfor vertical orientation and a wider tolerance threshold is the right approach. - Host app test page (
Issue32136.cs) is well-structured, usesCarouselView2(the Items2 handler), setsLoop = false(appropriate for a deterministic UI test), and exposes the rightAutomationIdvalues. - Test method name is descriptive:
CurrentItemShouldUpdateWhenScrollingVerticalCarouselView. - Issue link in
[Issue]attribute correctly references [CarouselViewHandler2] CurrentItem Not Updating with Vertical LinearItemsLayout #32136. [Category(UITestCategories.CarouselView)]is appropriate.PlatformAffected.iOSin the[Issue]attribute correctly limits scope.
kubaflo
left a comment
There was a problem hiding this comment.
Could you please review the AI's summary?
kubaflo
left a comment
There was a problem hiding this comment.
Could you please resolve conflicts?
|
Would love this to be included soon. This is a current out standing bug for me. |
kubaflo
left a comment
There was a problem hiding this comment.
Could you please resolve conflicts?
|
/review -b feature/refactor-copilot-yml |
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 32699Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 32699" |
|
/review -b feature/refactor-copilot-yml -p ios |
This comment has been minimized.
This comment has been minimized.
kubaflo
left a comment
There was a problem hiding this comment.
Could you try ai's suggestions?
|
/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.
| xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" | ||
| x:Class="Maui.Controls.Sample.MainPage" | ||
| xmlns:local="clr-namespace:Maui.Controls.Sample"> | ||
| <Grid Padding="20" RowSpacing="10"> |
There was a problem hiding this comment.
[major] Regression Prevention -- This commits a full CarouselView debugging page into the shared Sandbox app. The sandbox is intended to stay as temporary local repro space; merging this replaces the clean sandbox startup with issue-specific UI and the paired code-behind/MauiProgram debug scaffolding. Please revert the Controls.Sample.Sandbox changes and keep the regression coverage in TestCases.HostApp/TestCases.Shared.Tests.
| if (Math.Abs(page % 1) > (double.Epsilon * 100) || cv2Controller.ItemsSource.ItemCount <= 0) | ||
| // Vertical: Scroll stops wherever touch is released (no auto-centering), so use 0.1 (10%) threshold | ||
| // to accept positions near page boundaries where scroll naturally settles | ||
| double pageThreshold = isHorizontal ? (double.Epsilon * 100) : 0.1; |
There was a problem hiding this comment.
[major] CollectionView iOS/MacCatalyst -- VisibleItemsInvalidationHandler runs continuously while scrolling, not only after the scroll settles. With a 10% vertical threshold this can update Position/CurrentItem while the offset is still just past a page boundary; for Loop=true the same callback can enter the fake-item correction path and issue a non-animated ScrollToItem, interrupting the in-flight scroll. Please keep page acceptance tied to a settled/snap-complete state, or make vertical snapping produce exact page boundaries, rather than accepting the first 10% of every page.
| { | ||
| App.WaitForElement("ScrollButton"); | ||
| App.Tap("ScrollButton"); | ||
| var currentItemText = App.WaitForElement("CurrentItemLabel").GetText(); |
There was a problem hiding this comment.
[moderate] Regression Prevention and Test Coverage -- WaitForElement("CurrentItemLabel") only waits for the label to exist; it is already present before the tap, while the button starts an animated ScrollTo(..., animate: true). On slower CI this can read the initial/intermediate label before CurrentItemChanged fires. Please wait or poll for the expected text before asserting so the regression test is deterministic.
MauiBot
left a comment
There was a problem hiding this comment.
AI Review Summary
@Shalini-Ashokan — new AI review results are available based on this last commit:
db00dae.
Merge remote-tracking branch 'upstream/main' into fix-32136 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: e904e900
| Test | Without Fix (expect FAIL) | With Fix (expect PASS) |
|---|---|---|
🖥️ Issue32136 Issue32136 |
✅ FAIL — 261s | ✅ PASS — 103s |
🔴 Without fix — 🖥️ Issue32136: FAIL ✅ · 261s
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 535 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 539 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 5.54 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 5.6 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj (in 5.61 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/maps/src/Maps.csproj (in 5.61 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 5.61 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Foldable/src/Controls.Foldable.csproj (in 5.62 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 5.62 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 5.61 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 5.62 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.14304701
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.14304701
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.14304701
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.14304701
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.14304701
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.14304701
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304701
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304701
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
Controls.Foldable -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Foldable.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304701
Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
Detected signing identity:
Code Signing Key: "" (-)
Provisioning Profile: "" () - no entitlements
Bundle Id: com.microsoft.maui.uitests
App Id: com.microsoft.maui.uitests
Controls.TestCases.HostApp -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-ios/iossimulator-arm64/Controls.TestCases.HostApp.dll
Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
Optimizing assemblies for size. This process might take a while.
Build succeeded.
/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
1 Warning(s)
0 Error(s)
Time Elapsed 00:02:24.10
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/VisualTestUtils/VisualTestUtils.csproj (in 699 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Core/UITest.Core.csproj (in 699 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 699 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/CustomAttributes/Controls.CustomAttributes.csproj (in 699 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 700 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 33 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 787 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 814 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.NUnit/UITest.NUnit.csproj (in 1.52 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Appium/UITest.Appium.csproj (in 1.89 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Analyzers/UITest.Analyzers.csproj (in 2.4 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/VisualTestUtils.MagickNet/VisualTestUtils.MagickNet.csproj (in 2.21 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.iOS.Tests/Controls.TestCases.iOS.Tests.csproj (in 2.97 sec).
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304701
Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
Controls.CustomAttributes -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.CustomAttributes/Debug/net10.0/Controls.CustomAttributes.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304701
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.14304701
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.14304701
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.06] Discovering: Controls.TestCases.iOS.Tests
[xUnit.net 00:00:00.17] 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:13:42 PM FixtureSetup for Issue32136(iOS)
>>>>> 6/6/2026 3:13:46 PM CurrentItemShouldUpdateWhenScrollingVerticalCarouselView Start
>>>>> 6/6/2026 3:13:47 PM CurrentItemShouldUpdateWhenScrollingVerticalCarouselView Stop
>>>>> 6/6/2026 3:13:47 PM Log types: syslog, crashlog, performance, safariConsole, safariNetwork, server
Failed CurrentItemShouldUpdateWhenScrollingVerticalCarouselView [1 s]
Error Message:
Assert.That(currentItemText, Is.EqualTo("CurrentItem = Capuchin Monkey"))
Expected string length 29 but was 18. Strings differ at index 0.
Expected: "CurrentItem = Capuchin Monkey"
But was: "Button was clicked"
-----------^
Stack Trace:
at Microsoft.Maui.TestCases.Tests.Issues.Issue32136.CurrentItemShouldUpdateWhenScrollingVerticalCarouselView() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32136.cs:line 22
1) at Microsoft.Maui.TestCases.Tests.Issues.Issue32136.CurrentItemShouldUpdateWhenScrollingVerticalCarouselView() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32136.cs:line 22
NUnit Adapter 4.5.0.0: Test execution complete
Results File: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue32136.trx
Test Run Failed.
Total tests: 1
Failed: 1
Total time: 1.2350 Minutes
>>> TRX_RESULT_FILE: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue32136.trx
🟢 With fix — 🖥️ Issue32136: PASS ✅ · 103s
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 2.57 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 2.59 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 2.6 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 2.65 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 2.66 sec).
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.14304701
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.14304701
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.14304701
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.14304701
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.14304701
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.14304701
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304701
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304701
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304701
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
Controls.Foldable -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Foldable.dll
Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
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:51.35
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 332 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 363 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 381 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 398 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 416 ms).
8 of 13 projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14304701
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.14304701
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.14304701
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.14304701
Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
VisualTestUtils -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
UITest.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
VisualTestUtils.MagickNet -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
UITest.NUnit -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
UITest.Appium -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
UITest.Analyzers -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
Controls.TestCases.iOS.Tests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
Test run for /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (arm64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.04] Discovering: Controls.TestCases.iOS.Tests
[xUnit.net 00:00:00.16] 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:15:26 PM FixtureSetup for Issue32136(iOS)
>>>>> 6/6/2026 3:15:30 PM CurrentItemShouldUpdateWhenScrollingVerticalCarouselView Start
>>>>> 6/6/2026 3:15:31 PM CurrentItemShouldUpdateWhenScrollingVerticalCarouselView Stop
Passed CurrentItemShouldUpdateWhenScrollingVerticalCarouselView [828 ms]
NUnit Adapter 4.5.0.0: Test execution complete
Results File: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue32136.trx
Test Run Successful.
Total tests: 1
Passed: 1
Total time: 21.0722 Seconds
>>> TRX_RESULT_FILE: /Users/cloudtest/vss/_work/1/s/CustomAgentLogsTmp/UITests/TestResults/Issue32136.trx
📁 Fix files reverted (5 files)
eng/pipelines/ci-copilot.ymlsrc/Controls/samples/Controls.Sample.Sandbox/MainPage.xamlsrc/Controls/samples/Controls.Sample.Sandbox/MainPage.xaml.cssrc/Controls/samples/Controls.Sample.Sandbox/MauiProgram.cssrc/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs
UI Tests — CarouselView,CollectionView
Detected UI test categories: CarouselView,CollectionView
❌ Deep UI tests — 407 passed, 103 failed across 2 categories on platform-pool agent (replaces in-process counts above).
🧪 UI Test Execution Results (deep, platform pool)
| Category | Tests | Snapshot diffs |
|---|---|---|
CarouselView |
76/95 (17 ❌) | 17 diff PNGs |
CollectionView |
331/420 (86 ❌) | 84 diff PNGs |
❌ CarouselView — 17 failed tests
ValidateNoScrollOnInvalidItemWithLoop
System.InvalidOperationException :
Snapshot different than baseline: ValidateNoScrollOnInvalidItemWithLoop.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: ValidateNoScrollOnInvalidItemWithLoop.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.
...
ResizeCarouselViewKeepsIndex
System.InvalidOperationException :
Snapshot different than baseline: ResizeCarouselViewKeepsIndex.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: ResizeCarouselViewKeepsIndex.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
...
CarouselViewItemsShouldRenderVertically
System.InvalidOperationException :
Snapshot different than baseline: CarouselViewItemsShouldRenderVertically.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: CarouselViewItemsShouldRenderVertically.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
...
Issue32394CurrentItemShouldnotChange
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.Issues.Issue32394.Issue32394CurrentItemShouldnotChange() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32394.cs:line 25
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.Reflection.Runtime
...
AddItemsToCarouselViewWorks
System.InvalidOperationException :
Snapshot different than baseline: AddItemsToCarouselViewWorks.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: AddItemsToCarouselViewWorks.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
...
HorizontalScrollBarShouldHideOnNever
System.InvalidOperationException :
Snapshot different than baseline: HorizontalScrollBarShouldHideOnNever.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: HorizontalScrollBarShouldHideOnNever.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.
Se
...
CarouselViewItemShouldScaleProperly
System.InvalidOperationException :
Snapshot different than baseline: CarouselViewItemShouldScaleProperly.png (size differs - baseline is 2436x974 pixels, actual is 2622x1056 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: CarouselViewItemShouldScaleProperly.png (size differs - baseline is 2436x974 pixels, actual is 2622x1056 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See te
...
VerifySpacingAffectsItemSize
System.InvalidOperationException :
Snapshot different than baseline: VerifySpacingAffectsItemSize.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: VerifySpacingAffectsItemSize.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
...
TestDynamicItemTemplateChangeInCarouselView
System.InvalidOperationException :
Snapshot different than baseline: TestDynamicItemTemplateChangeInCarouselView.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: TestDynamicItemTemplateChangeInCarouselView.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
...
VerifyCarouselViewItemsSourceClearedDynamically
System.InvalidOperationException :
Snapshot different than baseline: VerifyCarouselViewItemsSourceClearedDynamically.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: VerifyCarouselViewItemsSourceClearedDynamically.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
...
CarouselViewShouldScrollToRightPosition
System.InvalidOperationException :
Snapshot different than baseline: CarouselViewShouldScrollToRightPosition.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: CarouselViewShouldScrollToRightPosition.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
...
CarouselViewShouldRenderCorrectly
System.InvalidOperationException :
Snapshot different than baseline: CarouselViewShouldRenderCorrectly.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: CarouselViewShouldRenderCorrectly.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
...
VerticalCarouselMandatorySingleSnapAdvancesOneCard
System.InvalidOperationException :
Snapshot different than baseline: VerticalCarouselMandatorySingleSnapAdvancesOneCard.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: VerticalCarouselMandatorySingleSnapAdvancesOneCard.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
...
VerifyCarouselLayoutOrientationChange
System.InvalidOperationException :
Snapshot different than baseline: VerifyCarouselLayoutOrientationChange.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: VerifyCarouselLayoutOrientationChange.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.
...
CarouselItemLoadsInCorrectPosition
System.InvalidOperationException :
Snapshot different than baseline: CarouselItemLoadsInCorrectPosition.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: CarouselItemLoadsInCorrectPosition.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
...
CarouselItemsShouldRenderProperly
System.InvalidOperationException :
Snapshot different than baseline: CarouselItemsShouldRenderProperly.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: CarouselItemsShouldRenderProperly.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
...
Issue29772ItemSpaceShouldApply
System.InvalidOperationException :
Snapshot different than baseline: Issue29772ItemSpaceShouldApply.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: Issue29772ItemSpaceShouldApply.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
...
❌ CollectionView — 86 failed tests
AddHeaderFooterAtRuntime
System.InvalidOperationException :
Snapshot different than baseline: AddHeaderFooterAtRuntime.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: AddHeaderFooterAtRuntime.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
...
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
...
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
...
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
...
CollectionViewItemsShouldRespectSafeAreaEdges
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewItemsShouldRespectSafeAreaEdges.png (size differs - baseline is 2436x974 pixels, actual is 2622x1056 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: CollectionViewItemsShouldRespectSafeAreaEdges.png (size differs - baseline is 2436x974 pixels, actual is 2622x1056 pixels)
If the correct baseline has changed (this isn't a a bug), then update the ba
...
CollectionViewGroupFooterTemplateShouldNotCrash
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewGroupFooterTemplateShouldNotCrash.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: CollectionViewGroupFooterTemplateShouldNotCrash.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
...
EmptyViewShouldRemeasureWhenParentLayoutChanges
System.InvalidOperationException :
Snapshot different than baseline: EmptyViewShouldRemeasureWhenParentLayoutChanges.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: EmptyViewShouldRemeasureWhenParentLayoutChanges.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
...
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
...
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
...
CollectionviewFooterHideswhenDynamicallyAddorRemoveItems
System.InvalidOperationException :
Snapshot different than baseline: CollectionviewFooterHideswhenDynamicallyAddorRemoveItems.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: CollectionviewFooterHideswhenDynamicallyAddorRemoveItems.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline has changed (this isn't a a
...
VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection
System.InvalidOperationException :
Snapshot different than baseline: VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_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: VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If t
...
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
...
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
...
VerifyMeasureAllItemsWithObservableCollection
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_ScrollingFeatureTests.VerifyMeasureAllItemsWithObservableCollection() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ScrollingFeatureTests.cs:line 53
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_Met
...
CollectionViewHorizontalItemSpacing
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewHorizontalItemSpacing.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: CollectionViewHorizontalItemSpacing.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
...
CollectionViewHeaderBlankWhenLastItemRemoved
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewHeaderBlankWhenLastItemRemoved.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: CollectionViewHeaderBlankWhenLastItemRemoved.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
...
VerifyStringItemsObservableCollectionWhenSingleModePreSelection
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.VerifyStringItemsObservableCollectionWhenSingleModePreSelection() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ItemsSourceFeatureTests.cs:line 610
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.MethodBaseInvoke
...
VerifyModelItemsGroupedListWhenSingleModePreSelection
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.VerifyModelItemsGroupedListWhenSingleModePreSelection() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ItemsSourceFeatureTests.cs:line 748
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.Interpre
...
GroupedCollectionViewItems
System.InvalidOperationException :
Snapshot different than baseline: GroupedCollectionViewItems.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: GroupedCollectionViewItems.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
...
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
...
VerifyEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection
System.InvalidOperationException :
Snapshot different than baseline: VerifyEmptyViewTemplateDisplaysCorrectly_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: VerifyEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png (size differs - baseline is 1124x2286 pixels, actual is 1206x2472 pixels)
If the correct baseline ha
...
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
...
FooterShouldDisplayAtBottomOfEmptyView
System.InvalidOperationException :
Snapshot different than baseline: FooterShouldDisplayAtBottomOfEmptyView.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: FooterShouldDisplayAtBottomOfEmptyView.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
...
AccessibilityTraitsSetCorrectly
System.InvalidOperationException :
Snapshot different than baseline: AccessibilityTraitsSetCorrectlyNone.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: AccessibilityTraitsSetCorrectlyNone.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
...
CollectionViewSingleItemAlignmentWithFooter
System.InvalidOperationException :
Snapshot different than baseline: CollectionViewSingleItemAlignmentWithFooter.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: CollectionViewSingleItemAlignmentWithFooter.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
...
VerifyDefaultScrollToRequested
System.InvalidOperationException :
Snapshot different than baseline: VerifyDefaultScrollToRequested.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: VerifyDefaultScrollToRequested.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
...
CellLayoutUpdatesCorrectlyAfterDeviceOrientationChanges
System.InvalidOperationException :
Snapshot different than baseline: Issue28657_Landscape.png (size differs - baseline is 2436x974 pixels, actual is 2622x1056 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: Issue28657_Landscape.png (size differs - baseline is 2436x974 pixels, actual is 2622x1056 pixels)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the
...
HeaderShouldBeRemovedWhenSetToNull
System.InvalidOperationException :
Snapshot different than baseline: HeaderShouldBeRemovedWhenSetToNull.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: HeaderShouldBeRemovedWhenSetToNull.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
...
VerifyCollectionViewVisualState
System.InvalidOperationException :
Snapshot different than baseline: VerifyCollectionViewVisualState.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: VerifyCollectionViewVisualState.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
...
VerticalGridCollectionViewLTRToRTLToggleShouldWork
System.InvalidOperationException :
Snapshot different than baseline: VerticalGridCollectionViewLTRToRTLToggleShouldWork.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: VerticalGridCollectionViewLTRToRTLToggleShouldWork.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
...
(+56 more — see TRX in artifact)
📎 Download drop-deep-uitests artifact (TRX + snapshot diffs)
Pre-Flight — Context & Validation
Issue: #32136 - CarouselView CurrentItem Not Updating with Vertical LinearItemsLayout
PR: #32699 - Fix CarouselView CurrentItem updates for vertical LinearItemsLayout on iOS
Platforms Affected: iOS (Items2 handler; MacCatalyst shares the same Items2/iOS implementation)
Files Changed: 4 implementation/sample, 2 test
Key Findings
- The PR changes
src/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cs, which is the active iOS/MacCatalyst CarouselView handler path. - Root cause appears to be page calculation in
VisibleItemsInvalidationHandler: vertical scrolling used a width-based page denominator, so vertical offsets did not resolve to the expected page index. - The PR also includes sandbox debugging/scaffolding changes in
src/Controls/samples/Controls.Sample.Sandbox/*; these are not part of the product fix. - Added coverage is a UI test for
Issue32136under the CarouselView category. - Gate result provided by caller: ✅ PASSED — tests fail without fix and pass with PR fix.
Code Review Summary
Verdict: NEEDS_CHANGES
Confidence: high
Errors: 1 | Warnings: 2 | Suggestions: 1
Key code review findings:
- ❌ Sandbox test scaffolding committed in
src/Controls/samples/Controls.Sample.Sandbox/MainPage.xaml,MainPage.xaml.cs, andMauiProgram.cs; these development-only changes should not merge. ⚠️ LayoutFactory2.csverticalpageThreshold = 0.1can fire loop correction while scrolling is still mid-animation, riskingLoop=truesnapping regressions.⚠️ Issue32136UI test readsCurrentItemLabelimmediately after tapping;WaitForElementonly waits for existence, so it may be timing-sensitive withanimate: true.- 💡 PR is draft/under active review; merge conflicts and reviewer concerns were indicated by the code-review sub-agent where available.
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #32699 | Use active-axis page size in LayoutFactory2 and widen vertical page-boundary threshold; align loop correction scroll position to vertical axis. |
✅ PASSED (Gate) | LayoutFactory2.cs, UI tests, sandbox files |
Original PR fix; gate already completed externally. |
Code Review — Deep Analysis
Code Review — PR #32699
Independent Assessment
What this changes: Fixes a page-calculation bug in LayoutFactory2.cs that prevented CurrentItem from updating in vertical CarouselView. The denominator of the page formula always used ContentSize.Width regardless of scroll orientation; the fix uses ContentSize.Height when isHorizontal=false. A 10% threshold replaces the near-zero epsilon threshold for vertical carousels because they use OrthogonalScrollingBehavior.None (no UIKit auto-centering). Two UI test files are added. The Sandbox MainPage.xaml/cs and MauiProgram.cs are modified with development/debug content.
Inferred motivation: With LinearItemsLayout(Vertical), users reported CurrentItem never updating. The page formula offset.Y / ContentSize.Width can never yield an integer (Y-offset / Width dimension ratio), so the VisibleItemsInvalidationHandler always early-returned before calling SetPosition.
Reconciliation with PR Narrative
Author claims: Fixed by using vertical offset for vertical orientation; validated on iOS, Android, Windows, and Mac.
Agreement/disagreement:
- ✅ Root cause analysis is correct — wrong dimension in denominator is definitively the bug.
- ✅ The formula change (
effectivePageSize= axis-appropriate dimension) is the right fix. ⚠️ The claim of validated Loop=true behavior is disputed by maintainer PureWeen, who reported "looping is super broken" after testing the sandbox code from this PR.- ❌ Sandbox files containing development scaffolding are included in the diff and must not be merged.
Findings
❌ Error — Sandbox test scaffolding committed
src/Controls/samples/Controls.Sample.Sandbox/MainPage.xaml, MainPage.xaml.cs, and MauiProgram.cs contain debug/development content: verbose Console.WriteLine spam, a UseHandler2 = true toggle flag, and a full CarouselView test page that overwrites the clean sandbox template. Per MAUI conventions, sandbox changes are temporary test scaffolding and must not be merged into main. These three files should be reverted to their state on main.
⚠️ Warning — 10% threshold breaks Loop=true behavior
LayoutFactory2.cs line 380: double pageThreshold = isHorizontal ? (double.Epsilon * 100) : 0.1;
Because VisibleItemsInvalidationHandler fires continuously during scroll (not just when settled), a 10% threshold causes it to fire at partial page values mid-animation. When Loop=true, this triggers premature loop-correction ScrollToItem calls (the pageIndex == 0 or pageIndex == maxIndex branches, ~line 394–428) while an animation is in progress — causing the "super broken" snapping behavior PureWeen identified. The cv2Controller.IsUpdating() guard does not protect against this case (it guards ItemsSource updates, not ongoing scroll animations).
The epsilon threshold worked for horizontal carousels because GroupPagingCentered auto-snaps to exact page boundaries, so the handler never fires at mid-page values. Safer alternatives:
- Add
MandatorySinglesnapping for vertical carousels (makes UIKit handle the snap; the handler sees exact boundaries, epsilon works again), or - Guard the loop-correction branch with a scroll-velocity/settled check rather than widening the threshold globally.
⚠️ Warning — UI test may be timing-sensitive with animate: true
TestCases.Shared.Tests/Tests/Issues/Issue32136.cs line 21:
App.Tap("ScrollButton");
var currentItemText = App.WaitForElement("CurrentItemLabel").GetText();The ScrollButton handler calls ScrollTo(..., animate: true). WaitForElement("CurrentItemLabel") waits for the element's existence (it already exists) not for the label text to change. On a slow device or CI machine, this may read the intermediate text "Button was clicked" before CurrentItemChanged fires. Should wait for the expected value explicitly:
App.WaitForElement(x => x.Marked("CurrentItemLabel").Text("CurrentItem = Capuchin Monkey"));💡 Suggestion — PR is in Draft with active CHANGES_REQUESTED
Currently in Draft state with CHANGES_REQUESTED from PureWeen (loop behavior) and kubaflo (AI summary, merge conflicts). Merge conflicts should be resolved before requesting re-review.
Devil's Advocate
On the 10% threshold: Could the loop-correction naturally absorb spurious firings? No — when page = 0.05 fires during a scroll-to-index-2 animation, pageIndex = 0 triggers a non-animated ScrollToItem(maxIndex-1, .Top), interrupting the ongoing animation. Not self-healing.
On the formula: Math checks out for the basic case: 400pt container, ItemSpacing=0, PeekAreaInsets=zero → effectivePageSize=400 → after scrolling to index 1, offset.Y ≈ 400, page=1.0, page % 1 = 0. ✅ Integer. The formula is structurally correct.
On the test: Appium's WaitForElement does poll with retries under the hood; in practice the test may pass reliably if the animation completes within the default wait. Risk is flakiness on slow CI, not systematic failure.
Verdict: NEEDS_CHANGES
Confidence: high
Summary: The core dimension fix (effectivePageSize using axis-appropriate container dimension) correctly identifies and resolves the root cause. However, two concrete blocking issues remain: (1) sandbox development files must be reverted before merge, and (2) the 10% threshold regresses Loop=true scroll behavior in a way the maintainer has already observed and flagged. The test is also mildly fragile around animated scroll timing. These should be addressed before the PR leaves draft status.
Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix | Route vertical CarouselView through snap-aware CustomUICollectionViewCompositionalLayout with implicit MandatorySingle/Start, while using active-axis page size and retaining the strict threshold. |
✅ PASS | 2 files | Better than PR fix because it avoids a broad 0.1 vertical threshold that can trigger Loop correction mid-scroll. |
| PR | PR #32699 | Use active-axis page size and offset; widen vertical page-boundary threshold to 0.1; align loop correction anchor to vertical axis. |
✅ PASSED (Gate) | 6 files | Original PR; gate was already completed externally. Includes sandbox scaffolding and threshold regression risk. |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| claude-opus-4.6 | 1 | Yes | Candidate 1: snap-aware vertical layout with implicit MandatorySingle/Start instead of broad threshold. |
| remaining models | N/A | Not queried | Stopped per caller's stop rule because Candidate 1 passed all tests and is demonstrably better than the PR's fix. |
Exhausted: No — stopped after a passing candidate that is better than the PR fix.
Selected Fix: Candidate #1 — It passes the iOS UI regression test and addresses the code-review concern by making vertical scrolling settle on page boundaries instead of accepting partial-page offsets with a broad threshold. It also leaves the PR's sandbox scaffolding out of the candidate.
Report — Final Recommendation
Comparative Report — PR #32699
Platform: iOS
Gate: ✅ Passed — tests fail without fix and pass with the PR fix. Gate verification was not rerun.
Candidates Compared
| Rank | Candidate | Regression result | Assessment |
|---|---|---|---|
| 1 | pr-plus-reviewer |
No failing regression evidence; implementation/test corrections match passing try-fix-1 core changes |
Best candidate. Retains the correct active-axis page calculation, removes Sandbox scaffolding, replaces the risky 0.1 vertical threshold with snap-to-page behavior, and makes the UI test deterministic. |
| 2 | try-fix-1 |
✅ Passed iOS UI regression (Issue32136) |
Strong technical fix. It avoids the Loop=true threshold risk and fixes test timing, but as an independent try-fix it is less directly tied to the PR than the reviewed PR-plus candidate. |
| 3 | pr |
✅ Passed gate | Fixes the reported CurrentItem update bug, but expert review found blocking issues: committed Sandbox scaffolding, a broad vertical threshold that can disrupt Loop=true scrolling, and a timing-sensitive UI test. |
Analysis
The raw PR correctly identifies the root cause: vertical CarouselView page detection in the iOS Items2 handler used a width-based denominator even when consuming vertical offsets. The active-axis page-size calculation is therefore the essential part of the fix and should be retained.
The PR's main weakness is how it compensates for vertical scrolling not landing exactly on page boundaries. A vertical pageThreshold = 0.1 makes the invalidation handler tolerate partial offsets, but that handler is called continuously during scroll. This creates a plausible and reviewer-confirmed regression risk for Loop=true, where fake-item correction can run before the scroll settles and jump the collection view mid-animation.
try-fix-1 addresses that risk more directly: rather than accepting partial page offsets, it makes vertical CarouselView use the existing custom compositional layout snapping pipeline so offsets settle on exact page boundaries. This preserves the strict threshold, uses the active-axis page size, and passed the iOS Issue32136 regression test.
pr-plus-reviewer combines the strengths of both: it starts from the PR, applies the expert reviewer's actionable corrections, and converges on the same snap-aware implementation/test robustness proven by try-fix-1, while also keeping the PR's HostApp regression page and removing unrelated Sandbox changes.
Winner
Winner: pr-plus-reviewer
pr-plus-reviewer is the best candidate because it keeps the PR's correct root-cause fix and regression coverage while addressing every expert reviewer finding. It ranks above try-fix-1 because it is the reviewed PR path with feedback applied; it ranks above the raw PR because it removes the Loop=true threshold risk, the Sandbox scaffolding, and the test flakiness.
Future Action — review latest findings
No alternative fix was selected for this run. Review the session findings and CI results before merging.
kubaflo
left a comment
There was a problem hiding this comment.
Could you please check the ai's suggestions, and check the failing tests?
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
In CarouselView, when using LinearItemsLayout with Orientation="Vertical", the CurrentItem property does not update correctly.
Root Cause
Page calculation always used horizontal scroll offset regardless of scroll orientation.
Description of Change
Modified page calculation to use vertical scroll offset for vertical orientation. Implemented 10% tolerance threshold to accept positions near page boundaries.
Validated the behavior in the following platforms
Issues Fixed
Fixes #32136
Output ScreenShot
32136-BeforeFix.mov
32136-AfterFix.mov