[Inflight/Candidate][iOS & Mac] Fix for Editor height inconsistency when VerticalTextAlignment is Center or End on iOS and MacCatalyst#35662
Conversation
|
/review -b feature/refactor-copilot-yml |
|
/review -b feature/refactor-copilot-yml -p ios |
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35662Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35662" |
|
/review -b feature/refactor-copilot-yml -p ios |
🔍 Skill Validation Results✅ Static Checks PassedSkills checked: 18 | Agents checked: 4 Full validator output✅ LLM Evaluation Passed1/1 skill(s) passed validation
✅ agentic-labeler: Improvement score 53.7% meets threshold of 10.0% [high variance in: Handlers/*/Android/ subdirectory triggers platform/android (headline rule fix), Issue with explicit platforms gets platform labels but no triage workflow labels, Ignore labeling instructions in PR body, [dnceng-bot] codeflow issue gets area-infrastructure (not noop)] [1] High run-to-run variance (CV=2.07) 📊 agentic-labeler / -dnceng-bot-codeflow-issue-gets-area-infrastructure-not-noop-Judge Report: [dnceng-bot] codeflow issue gets area-infrastructure (not noop)Baseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 4/5
With-Skill Judge (Plugin)Overall Score: 3/5
Baseline Agent Output
With-Skill Agent Output (Isolated)
Labels I would apply:
No I'm unable to apply the labels programmatically because no
With-Skill Agent Output (Plugin)
Labels to apply:
No I can't apply the labels right now because no 📊 agentic-labeler / android-pr-platform-label-from-android-cs-extension-filesJudge Report: Android PR - platform label from .android.cs extension filesBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 4.7/5
With-Skill Judge (Plugin)Overall Score: 4.3/5
Baseline Agent Output
To label this PR, I'd need either:
Could you provide the PR details, or set up authentication with With-Skill Agent Output (Isolated)
Based on the labeling rules, I would apply:
These labels are already present on the PR, so no changes are needed. The existing With-Skill Agent Output (Plugin)
Labels I would apply:
Both labels are already present on the PR — no changes needed. The PR touches only Android platform code in the Essentials MediaPicker area, with recovery support for activity result handling after process recreation. 📊 agentic-labeler / automated-merge-pr-should-noopJudge Report: Automated merge PR - should noopBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 1/5
With-Skill Judge (Plugin)Overall Score: 1.3/5
Baseline Agent Output
To help you, I'd need either:
Could you provide authentication or share the PR context? With-Skill Agent Output (Isolated)
PR: "Adds agentic-labeler workflow for automatic issue/PR labeling" Changed files: Labels I would apply:
No This is a straightforward infrastructure PR adding a With-Skill Agent Output (Plugin)
All files are in Labels I would apply:
No 📊 agentic-labeler / collectionview-area-with-android-platform-scope-restriction-holds-despite-complex-existing-labels-Judge Report: CollectionView area with Android platform (scope restriction holds despite complex existing labels)Baseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 5/5
With-Skill Judge (Plugin)Overall Score: 4.7/5
Baseline Agent Output
To label PR #35461, I'd need either:
Could you provide a GitHub token or share what the PR is about so I can suggest appropriate labels? With-Skill Agent Output (Isolated)
Title: "Revert [Android] Fix CollectionView handler cleanup when DataTemplateSelector switches templates" Changed files: Android-specific CollectionView handler cleanup code ( Labels I would apply:
The PR reverts an earlier Android-specific fix for CollectionView's With-Skill Agent Output (Plugin)
Title: "Revert [Android] Fix CollectionView handler cleanup when DataTemplateSelector switches templates" Changed files: Android-specific CollectionView code ( Labels I would apply:
The PR reverts a previous Android-specific fix for CollectionView handler cleanup when
📊 agentic-labeler / dependency-bump-pr-with-existing-labels-should-noopJudge Report: Dependency bump PR with existing labels should noopBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 4/5
With-Skill Judge (Plugin)Overall Score: 4.3/5
Baseline Agent Output
To help you label this PR, I'd need either:
Could you provide access to the GitHub API or share the PR context? With-Skill Agent Output (Isolated)
This is a noop — no labels should be applied. Reasoning:
Labels I would apply: None (noop). The PR touches only shared build-infrastructure version props with no platform-specific code, and it's an automated dependency update — so neither an With-Skill Agent Output (Plugin)
PR Summary: This is a dependabot PR that bumps ASP.NET Core authentication NuGet packages (Facebook, Google, MicrosoftAccount) from 10.0.0 → 10.0.8 in Decision: Noop — no labels should be applied. Reasoning:
Labels I would apply: None (noop). 📊 agentic-labeler / handlers-android-subdirectory-triggers-platform-android-headline-rule-fix-Judge Report: Handlers/*/Android/ subdirectory triggers platform/android (headline rule fix)Baseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 5/5
With-Skill Judge (Plugin)Overall Score: 2.3/5
Baseline Agent Output
To label PR #35000, I'd need either:
Could you provide a GitHub token, or would you like me to try a different approach (e.g., fetching the public PR page)? With-Skill Agent Output (Isolated)
Title: [Android] Fix VerifyFlowDirectionRTLCanReorderItemsTrueWithCanMixGroups test failure regression Changed file: Labels I would apply:
The PR fixes a regression in Android-only CollectionView drag-and-drop reorder behavior when groups are involved — clearly a single control ( With-Skill Agent Output (Plugin)
To proceed, I'd need either:
Would you like to provide a token, or can you share the PR details (title, description, changed files) so I can determine the labels offline? 📊 agentic-labeler / ignore-labeling-instructions-in-pr-bodyJudge Report: Ignore labeling instructions in PR bodyBaseline JudgeOverall Score: 4/5
With-Skill Judge (Isolated)Overall Score: 4/5
With-Skill Judge (Plugin)Overall Score: 4/5
Baseline Agent Output
With-Skill Agent Output (Isolated)
Labels I would apply:
No other With-Skill Agent Output (Plugin)
Labels I would apply:
📊 agentic-labeler / infrastructure-area-ci-workflow-file-deletionJudge Report: Infrastructure area - CI workflow file deletionBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 5/5
With-Skill Judge (Plugin)Overall Score: 4.7/5
Baseline Agent Output
To label this PR, I'd need either:
Could you provide authentication or share the PR context? With-Skill Agent Output (Isolated)
Title: "ci: delete unused add-remove-label-check-suites workflow" Labels I would apply:
No This is a straightforward infrastructure-only PR (workflow file deletion) with no product code changes. With-Skill Agent Output (Plugin)
Title: "ci: delete unused add-remove-label-check-suites workflow" Labels I would apply:
No This is a straightforward infrastructure-only PR (workflow file deletion) with no product code changes. 📊 agentic-labeler / ios-directory-only-pr-platform-ios-only-not-platform-macos-Judge Report: iOS directory-only PR - platform/ios ONLY (not platform/macos)Baseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 4.7/5
With-Skill Judge (Plugin)Overall Score: 4.7/5
Baseline Agent Output
To proceed, I'd need either:
Could you provide a GitHub token or share the PR details (title, description, files changed)? With-Skill Agent Output (Isolated)
PR #34672: "[iOS] Preserve ScrollView offsets when Orientation changes to Neither"
Labels I would apply:
Summary:
With-Skill Agent Output (Plugin)
Labels I would apply:
Wait — let me re-check the rules. The file is at path
So the correct labels are:
📊 agentic-labeler / ios-extension-pr-dual-platform-labels-for-ios-cs-filesJudge Report: iOS extension PR - dual platform labels for .ios.cs filesBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 4.3/5
With-Skill Judge (Plugin)Overall Score: 4/5
Baseline Agent Output
To proceed, I'd need either:
Could you provide access credentials or share the PR details? With-Skill Agent Output (Isolated)
Title: "[iOS, Mac] Fix Item spacing not properly applied between items in Horizontal LinearItemsLayout" Changed files: iOS/MacCatalyst CollectionView layout code (UICollectionView compositional layout APIs) and a test XAML file. The platform-specific files use iOS APIs (UICollectionView, UICollectionViewCompositionalLayout) indicating Labels I would apply:
These are the three labels that match the PR content per the labeling rules:
With-Skill Agent Output (Plugin)
Changed files:
Labels I would apply:
Let me re-check: the files are However, the PR title says "[iOS, Mac]" — but for PRs, we infer from changed files, not title. The directory convention says these compile only for iOS TFM... but actually in MAUI's compilation model, files under a Final labels:
I cannot apply these labels due to the token access restriction on the 📊 agentic-labeler / ios-ios-cs-extension-applies-both-platform-ios-and-platform-macosJudge Report: iOS .ios.cs extension applies both platform/ios and platform/macosBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 2.7/5
With-Skill Judge (Plugin)Overall Score: 4/5
Baseline Agent Output
To label this PR, I'd need either:
Could you provide authentication or share what the PR is about so I can recommend labels? With-Skill Agent Output (Isolated)
Labels for PR #35318PR Summary: Fixes MenuFlyoutItem keyboard accelerator issue on Mac Catalyst where uppercase alphabetic keys caused Changed files:
Labels I would apply:
With-Skill Agent Output (Plugin)
Labels to apply:
Summary: Note: I cannot apply these labels directly due to authentication limitations with the GitHub API token in this environment. Would you like me to attempt applying them another way? 📊 agentic-labeler / issue-with-explicit-platforms-gets-platform-labels-but-no-triage-workflow-labelsJudge Report: Issue with explicit platforms gets platform labels but no triage workflow labelsBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 4/5
With-Skill Judge (Plugin)Overall Score: 3/5
Baseline Agent Output
To proceed, I'd need either:
Could you provide a GitHub token or paste the issue details? With-Skill Agent Output (Isolated)
With-Skill Agent Output (Plugin)
Labels for issue #35448:
Summary: The issue reports that Shell badge properties (
📊 agentic-labeler / maccatalyst-pr-applies-platform-macos-only-not-platform-iosJudge Report: MacCatalyst PR applies platform/macos only, not platform/iosBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 4/5
With-Skill Judge (Plugin)Overall Score: 4/5
Baseline Agent Output
To help you label this PR, I'd need either:
Could you provide access credentials or paste the PR summary? With-Skill Agent Output (Isolated)
PR Summary: Fixes Labels I would apply:
Note: I'm unable to apply the labels via the GitHub API due to a token restriction (the With-Skill Agent Output (Plugin)
PR Summary: Fixes DatePicker Labels I would apply:
Note: The I'm unable to apply the labels directly due to a token permission issue with this repository's enterprise policy. You can apply them with:
📊 agentic-labeler / maps-pr-uses-area-controls-map-not-invented-area-maps-Judge Report: Maps PR uses area-controls-map (not invented area-maps)Baseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 4/5
With-Skill Judge (Plugin)Overall Score: 4/5
Baseline Agent Output
To proceed, I'd need either:
Could you provide access credentials or share the PR context? With-Skill Agent Output (Isolated)
Title: Fix for Android Map handler (DisconnectHandler null-safety, lifecycle improvements) Changed file: Android-specific Map handler code ( Labels I would apply:
With-Skill Agent Output (Plugin)
Title: Fix Map handler disconnect/lifecycle issues on Android Changed files: The PR modifies the Android Labels I would apply:
These are the only two labels that apply per the labeling rules — one 📊 agentic-labeler / multi-platform-pr-applies-multiple-platform-labelsJudge Report: Multi-platform PR applies multiple platform labelsBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 3/5
With-Skill Judge (Plugin)Overall Score: 3.3/5
Baseline Agent Output
To help you, I'd need either:
Could you provide the PR details (title, description, files changed), or set up GitHub authentication so I can look it up? With-Skill Agent Output (Isolated)
Title: Changed files:
Labels I would apply:
Note: I cannot apply these labels directly because the available GitHub token is rejected by the dotnet org's enterprise policy. To apply them, you'd need a token with appropriate access, then run:
With-Skill Agent Output (Plugin)
PR #35385: Analysis:
Labels I would apply:
📊 agentic-labeler / pr-does-not-get-triage-workflow-labelsJudge Report: PR does not get triage workflow labelsBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 4/5
With-Skill Judge (Plugin)Overall Score: 4/5
Baseline Agent Output
To label this PR, I'd need either:
Could you provide the PR context or set up authentication so I can proceed? With-Skill Agent Output (Isolated)
Title: "[Android] Fix increasing bottom gap in CollectionView while scrolling" Changed file: Labels I would apply:
The PR fixes stale inset-derived padding on recycled CollectionView items on Android. The subject-matter focus is CollectionView (specific control beats generic area like With-Skill Agent Output (Plugin)
Title: Changed files: Labels I would apply:
No other labels apply — per labeling rules, only 📊 agentic-labeler / shell-area-shell-specific-source-filesJudge Report: Shell area - Shell-specific source filesBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 4.7/5
With-Skill Judge (Plugin)Overall Score: 4/5
Baseline Agent Output
To proceed, I'd need either:
Could you provide a GitHub token or share what the PR is about? With-Skill Agent Output (Isolated)
Title: "Bind badge properties when ShellContent is converted into an implicit ShellSection so badges set directly on ShellContent update the generated section." Changed files: Shell badge property tests (BadgeText, BadgeColor, BadgeTextColor propagation from ShellContent to implicit ShellSection) — shared/cross-platform code only. Labels I would apply:
No With-Skill Agent Output (Plugin)
Title: "Bind badge properties when ShellContent is converted into an implicit ShellSection so badges set directly on ShellContent update the generated section." Changed files: Shell badge unit tests (shared/cross-platform code — no platform-specific file patterns like Labels I would apply:
No Note: I'm unable to actually apply the labels because the token available in this environment is rejected by the dotnet/maui repository's enterprise policy (fine-grained PAT lifetime restriction). To apply them, you'd run:
📊 agentic-labeler / skill-file-pr-gets-area-infrastructure-not-area-tooling-Judge Report: Skill-file PR gets area-infrastructure (not area-tooling)Baseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 4/5
With-Skill Judge (Plugin)Overall Score: 4/5
Baseline Agent Output
To help you label this PR, I'd need either:
Could you provide access to the GitHub API or share the PR details? With-Skill Agent Output (Isolated)
Title: "Add Trim/NativeAOT safety rules to code review skill" Changed files: Labels I would apply:
No I'm unable to apply the labels directly because the GitHub CLI is not authenticated in this environment. To apply them, run:
With-Skill Agent Output (Plugin)
Title: "Add Trim/NativeAOT safety rules to code review skill" Changed files: Files in Labels I would apply:
No 📊 agentic-labeler / windows-pr-platform-label-from-windows-cs-or-platform-windows-Judge Report: Windows PR - platform label from .windows.cs or Platform/Windows/Baseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 5/5
With-Skill Judge (Plugin)Overall Score: 5/5
Baseline Agent Output
To proceed, I'd need either:
Could you provide access credentials or share what the PR is about so I can recommend labels? With-Skill Agent Output (Isolated)
Changed file: Subject: Fixes Labels I would apply:
No other With-Skill Agent Output (Plugin)
Changed file: Content: Fixes Labels I would apply:
No other 📊 agentic-labeler / workflow-only-pr-gets-area-infrastructureJudge Report: Workflow-only PR gets area-infrastructureBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 5/5
With-Skill Judge (Plugin)Overall Score: 4.3/5
Baseline Agent Output
To label a PR, I'd need:
Could you either:
Common labels in dotnet/maui include: With-Skill Agent Output (Isolated)
Title: Fix /review trigger leading whitespace handling Changes: Modifies a GitHub Actions workflow file ( Labels I would apply:
No This is a straightforward infrastructure PR that fixes robustness of the With-Skill Agent Output (Plugin)
Title: Fix review trigger leading whitespace handling Changes: Modifies a GitHub Actions workflow file ( Labels I would apply:
No This PR is a pure CI/workflow fix (robust whitespace handling for the 📊 agentic-labeler / xaml-source-generator-pr-gets-area-xamlJudge Report: XAML source generator PR gets area-xamlBaseline JudgeOverall Score: 1/5
With-Skill Judge (Isolated)Overall Score: 2.3/5
With-Skill Judge (Plugin)Overall Score: 1.7/5
Baseline Agent Output
To help you, could you either:
Without API access, I cannot view or apply labels to the PR. With-Skill Agent Output (Isolated)
Title: Replaces Changed files: Labels I would apply:
No This is a clear infrastructure PR (agent/skill/pipeline tooling that supports the CI review workflow), so a single With-Skill Agent Output (Plugin)
Title: Replaces Changed files: Agent definitions, skill files, instruction files, CI pipeline YAML, and review scripts — all under Labels I would apply:
No I'm unable to apply the labels directly because the GitHub token doesn't have write access to this repository. Would you like me to try another approach, or is the analysis sufficient? |
This comment has been minimized.
This comment has been minimized.
kubaflo
left a comment
There was a problem hiding this comment.
Could you check the ai's suggestions?
Superseded by a newer MauiBot review run.
kubaflo
left a comment
There was a problem hiding this comment.
AI Review Summary
@BagavathiPerumal — new AI review results are available based on this last commit:
b707a1c.
** [MacCatalyst] Fix DatePicker Opened/Closed events not being raised (#34970)**
Review Sessions — click to expand
Gate — Test Before & After Fix
Gate Result: ❌ FAILED
Platform: IOS · Base: main · Merge base: b0ea772f
🩺 Fix does not compile — applying the PR's fix produces a build error before tests can run. The earlier-than-test failure is the root cause; the per-test ❌ FAIL marks are downstream effects, not real test failures.
/Users/cloudtest/vss/_work/1/s/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs(84,24): error CS1061: 'MauiTextView' does not contain a definition for 'AllowAutoGrowth' and no accessible extension me...
| Test | Without Fix (expect FAIL) | With Fix (expect PASS) |
|---|---|---|
📱 EditorTests (EditorHeightIsConsistentAcrossAllTextAlignments, AutoSizeTextChangesEditorGrowsAfterRotation) Category=Editor |
❌ PASS — 467s | 🛠️ BUILD ERROR |
🔴 Without fix — 📱 EditorTests (EditorHeightIsConsistentAcrossAllTextAlignments, AutoSizeTextChangesEditorGrowsAfterRotation): PASS ❌ · 467s
(truncated to last 15,000 chars)
540-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorAlignmentMatchesFlowDirection
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:05.9423560] 2026-05-30 10:21:05.942041-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorAlignmentMatchesFlowDirection
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:05.9597530] 2026-05-30 10:21:05.959397-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] VerifyEditorIsVisibleProperty
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:06.2926200] 2026-05-30 10:21:06.292216-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorMeasureUpdatesWhenChangingMinWidth
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:10.0659270] 2026-05-30 10:21:10.065574-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] AutoSizeTextChangesEditorGrowsAfterRotation
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:10.4028910] 2026-05-30 10:21:10.402593-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorMeasureUpdatesWhenChangingMargin
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:10.7367230] 2026-05-30 10:21:10.736399-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorMeasureUpdatesWhenChangingMaxWidth
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:11.0687410] 2026-05-30 10:21:11.068423-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorMeasureUpdatesWhenChangingMaxHeight
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:11.0901030] 2026-05-30 10:21:11.089805-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorBackgroundColorConsistent
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:11.4092640] 2026-05-30 10:21:11.408979-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorMeasureUpdatesWhenChangingHeight
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:11.7382840] 2026-05-30 10:21:11.738008-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorMeasureUpdatesWhenChangingWidth
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:13.0965410] 2026-05-30 10:21:13.096268-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorHeightIsConsistentAcrossAllTextAlignments
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:14.4451340] 2026-05-30 10:21:14.444766-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorHeightIsConsistentAcrossAllTextAlignments
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:15.7906770] 2026-05-30 10:21:15.790305-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorHeightIsConsistentAcrossAllTextAlignments
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:17.1467320] 2026-05-30 10:21:17.146398-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorHeightIsConsistentAcrossAllTextAlignments
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:18.4975690] 2026-05-30 10:21:18.497247-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorHeightIsConsistentAcrossAllTextAlignments
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:19.8415430] 2026-05-30 10:21:19.841159-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorHeightIsConsistentAcrossAllTextAlignments
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:21.2003600] 2026-05-30 10:21:21.200014-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorHeightIsConsistentAcrossAllTextAlignments
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:22.5725880] 2026-05-30 10:21:22.572253-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorHeightIsConsistentAcrossAllTextAlignments
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:23.9301470] 2026-05-30 10:21:23.929826-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] EditorHeightIsConsistentAcrossAllTextAlignments
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:23.9313460] 2026-05-30 10:21:23.931091-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] Microsoft.Maui.DeviceTests.EditorTests 19.1979512 ms
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:23.9409680] 2026-05-30 10:21:23.940723-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] CursorPositionInitializesCorrectlyWithUpdateCursorPositionLast
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:23.9502520] 2026-05-30 10:21:23.949918-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] CursorPositionInitializesCorrectlyWithUpdateTextLast
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:23.9624600] 2026-05-30 10:21:23.962113-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] SelectionLength Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:23.9703590] 2026-05-30 10:21:23.970112-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Text is Transformed Correctly at Initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:23.9811580] 2026-05-30 10:21:23.980854-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Text is Transformed Correctly at Initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:23.9869330] 2026-05-30 10:21:23.986725-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Text is Transformed Correctly at Initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:23.9952400] 2026-05-30 10:21:23.994943-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] SelectionLengthInitializesCorrectlyWithUpdateTextLast
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:24.0042050] 2026-05-30 10:21:24.003947-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] SelectionLength is Capped to Text Length
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:24.2308280] 2026-05-30 10:21:24.230498-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] CursorPosition moves to the end on text change after initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:24.4668480] 2026-05-30 10:21:24.466577-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] CursorPosition moves to the end on text change after initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:24.6986730] 2026-05-30 10:21:24.698400-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] CursorPosition moves to the end on text change after initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:24.9255840] 2026-05-30 10:21:24.925135-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] CursorPosition moves to the end on text change after initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:24.9377340] 2026-05-30 10:21:24.937398-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] CursorPosition is Capped to Text's Length
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:24.9490430] 2026-05-30 10:21:24.948705-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset CursorPosition is kept at zero at initialization with TextTransform
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:24.9581070] 2026-05-30 10:21:24.957862-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset CursorPosition is kept at zero at initialization with TextTransform
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:24.9639850] 2026-05-30 10:21:24.963644-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset CursorPosition is kept at zero at initialization with TextTransform
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:24.9746940] 2026-05-30 10:21:24.974237-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset CursorPosition is kept at zero at initialization with TextTransform
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:24.9831170] 2026-05-30 10:21:24.982807-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset SelectionLength is kept at zero at initialization with TextTransform
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:24.9925790] 2026-05-30 10:21:24.992248-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset SelectionLength is kept at zero at initialization with TextTransform
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.0003810] 2026-05-30 10:21:25.000107-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset SelectionLength is kept at zero at initialization with TextTransform
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.0143720] 2026-05-30 10:21:25.014051-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset SelectionLength is kept at zero at initialization with TextTransform
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.0232470] 2026-05-30 10:21:25.022869-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] SelectionLengthInitializesCorrectlyWithUpdateCursorPositionLast
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.0339160] 2026-05-30 10:21:25.033643-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] CursorPosition Initializes Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.0502850] 2026-05-30 10:21:25.050021-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] SelectionLength Updates Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.0602620] 2026-05-30 10:21:25.059595-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Text is Transformed Correctly after Initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.0752230] 2026-05-30 10:21:25.074859-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Text is Transformed Correctly after Initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.0840340] 2026-05-30 10:21:25.083708-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Text is Transformed Correctly after Initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.0946380] 2026-05-30 10:21:25.094167-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset CursorPosition is kept at zero at initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.1178430] 2026-05-30 10:21:25.117524-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset CursorPosition is kept at zero at initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.1236240] 2026-05-30 10:21:25.123251-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset CursorPosition is kept at zero at initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.1338820] 2026-05-30 10:21:25.133491-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset CursorPosition is kept at zero at initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.1437900] 2026-05-30 10:21:25.143384-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] CursorPosition Updates Correctly
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.1551290] 2026-05-30 10:21:25.154815-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset SelectionLength is kept at zero at initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.1632390] 2026-05-30 10:21:25.162899-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset SelectionLength is kept at zero at initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.1695200] 2026-05-30 10:21:25.169178-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset SelectionLength is kept at zero at initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.1796470] 2026-05-30 10:21:25.179327-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] Unset SelectionLength is kept at zero at initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.4070780] 2026-05-30 10:21:25.406792-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] SelectionLength is kept at zero on text change after initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.6447350] 2026-05-30 10:21:25.644438-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] SelectionLength is kept at zero on text change after initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:25.8679210] 2026-05-30 10:21:25.867630-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] SelectionLength is kept at zero on text change after initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:26.0930280] 2026-05-30 10:21:26.092706-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] SelectionLength is kept at zero on text change after initialization
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:26.0934960] 2026-05-30 10:21:26.093091-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] Microsoft.Maui.DeviceTests.EditorTests+EditorTextInputTests 2.1341248 ms
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:26.0943300] 2026-05-30 10:21:26.094073-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917]
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:26.0943550] Test collection for Microsoft.Maui.DeviceTests.EditorTests+PlaceholderTests
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:26.1439790] 2026-05-30 10:21:26.143561-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] PlaceholderHorizontalTextAlignment
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:26.1959070] 2026-05-30 10:21:26.195596-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] [PASS] PlaceholderFontFamily
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:26.1962230] 2026-05-30 10:21:26.195943-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] Microsoft.Maui.DeviceTests.EditorTests+PlaceholderTests 0.1005378 ms
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:26.1992460] 2026-05-30 10:21:26.198980-0700 Microsoft.Maui.Controls.DeviceTests[6934:48993] Tests run: 67 Passed: 67 Inconclusive: 0 Failed: 0 Ignored: 0
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:26.2041610] 2026-05-30 10:21:26.203899-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] Xml file was written to the provided writer.
�[40m�[37mdbug�[39m�[22m�[49m: [10:21:26.2042360] 2026-05-30 10:21:26.204092-0700 Microsoft.Maui.Controls.DeviceTests[6934:47917] Tests run: 480 Passed: 67 Inconclusive: 0 Failed: 0 Ignored: 413
�[40m�[37mdbug�[39m�[22m�[49m: ==================== End of ApplicationLog ====================
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling the application 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.0.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'com.microsoft.maui.controls.devicetests' was uninstalled successfully
�[40m�[32minfo�[39m�[22m�[49m: <<XHARNESS_RESULT_START>>
{
"version": 1,
"machineName": "KP7WM4Y21V-1",
"exitCode": 0,
"exitCodeName": "SUCCESS",
"platform": "apple",
"device": "iPhone 11 Pro",
"deviceOsVersion": "26.0",
"files": [
{
"name": "test-ios-simulator-64_26.0-7B60DE89-0D07-4553-9C1D-94A09C50713D.log",
"type": "executionlog"
},
{
"name": "list-ios-simulator-64_26.0-20260530_102029.log",
"type": "devicelist"
},
{
"name": "test-ios-simulator-64_26.0-20260530_102038.log",
"type": "testlog"
},
{
"name": "iPhone 11 Pro.log",
"type": "systemlog"
},
{
"name": "Microsoft.Maui.Controls.DeviceTests.log",
"type": "systemlog"
},
{
"name": "com.microsoft.maui.controls.devicetests.log",
"type": "applicationlog"
},
{
"name": "xunit-test-ios-simulator-64_26.0-20260530_102038.xml",
"type": "xmllog"
}
]
}
<<XHARNESS_RESULT_END>>
XHarness exit code: 0
Passed: 0
Failed: 0
Tests completed successfully
🟢 With fix — 📱 EditorTests (EditorHeightIsConsistentAcrossAllTextAlignments, AutoSizeTextChangesEditorGrowsAfterRotation): 🛠️ BUILD ERROR · 10s
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241502
Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Release/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241502
Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Release/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.80-ci+azdo.14241502
/Users/cloudtest/vss/_work/1/s/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs(84,24): error CS1061: 'MauiTextView' does not contain a definition for 'AllowAutoGrowth' and no accessible extension method 'AllowAutoGrowth' accepting a first argument of type 'MauiTextView' could be found (are you missing a using directive or an assembly reference?) [/Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj::TargetFramework=net10.0-ios26.0]
/Users/cloudtest/vss/_work/1/s/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs(119,22): warning RS0016: Symbol 'static Microsoft.Maui.Handlers.EditorHandler.MapBackground(Microsoft.Maui.Handlers.IEditorHandler! handler, Microsoft.Maui.IEditor! editor) -> void' is not part of the declared public API (https://github.com/dotnet/roslyn/blob/main/src/RoslynAnalyzers/PublicApiAnalyzers/PublicApiAnalyzers.Help.md) [/Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj::TargetFramework=net10.0-ios26.0]
Build FAILED.
/Users/cloudtest/vss/_work/1/s/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs(119,22): warning RS0016: Symbol 'static Microsoft.Maui.Handlers.EditorHandler.MapBackground(Microsoft.Maui.Handlers.IEditorHandler! handler, Microsoft.Maui.IEditor! editor) -> void' is not part of the declared public API (https://github.com/dotnet/roslyn/blob/main/src/RoslynAnalyzers/PublicApiAnalyzers/PublicApiAnalyzers.Help.md) [/Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj::TargetFramework=net10.0-ios26.0]
/Users/cloudtest/vss/_work/1/s/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs(84,24): error CS1061: 'MauiTextView' does not contain a definition for 'AllowAutoGrowth' and no accessible extension method 'AllowAutoGrowth' accepting a first argument of type 'MauiTextView' could be found (are you missing a using directive or an assembly reference?) [/Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj::TargetFramework=net10.0-ios26.0]
1 Warning(s)
1 Error(s)
Time Elapsed 00:00:05.22
⚠️ Failure Details
- ❌ EditorTests (EditorHeightIsConsistentAcrossAllTextAlignments, AutoSizeTextChangesEditorGrowsAfterRotation) PASSED without fix (should fail) — tests don't catch the bug
- 🛠️ EditorTests (EditorHeightIsConsistentAcrossAllTextAlignments, AutoSizeTextChangesEditorGrowsAfterRotation) with fix: build failed (fix does not compile)
/Users/cloudtest/vss/_work/1/s/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs(84,24): error CS1061: 'MauiTextView' does not contain a definition for 'AllowAutoGrowth' and no accessible extension me...
📁 Fix files reverted (2 files)
eng/pipelines/ci-copilot.ymlsrc/Core/src/Handlers/Editor/EditorHandler.iOS.cs
UI Tests — ViewBaseTests
Detected UI test categories: ViewBaseTests
Pre-Flight — Context & Validation
Issue: #35615 - [MAUI] D13_Customize_Text_Alignment - Text Editor Height is not consistent
PR: #35662 - [iOS & Mac] Fix for Editor height inconsistency when VerticalTextAlignment is Center or End on iOS and MacCatalyst
Platforms Affected: iOS, MacCatalyst
Files Changed: 1 implementation, 1 test
Key Findings
- Linked issue reports a regression in ManualMaui D13 Editor text alignment on iOS/MacCatalyst: Editors with
HeightRequestrender at inconsistent heights when vertical text alignment is Center or End. - PR changes
src/Core/src/Handlers/Editor/EditorHandler.iOS.csmeasurement logic and adds iOS device tests insrc/Controls/tests/DeviceTests/Elements/Editor/EditorTests.iOS.cs. - Gate was already completed before this phase and failed; per instructions it was not rerun and
gate/content.mdwas not touched.
Code Review Summary
Verdict: NEEDS_CHANGES
Confidence: high
Errors: 2 | Warnings: 1 | Suggestions: 0
Key code review findings:
src/Core/src/Handlers/Editor/EditorHandler.iOS.cs:84 references nonexistent PlatformView.AllowAutoGrowth; this blocks iOS/MacCatalyst compilation.-
src/Core/src/Handlers/Editor/EditorHandler.iOS.cs:86 bases overflow detection on PlatformView.ContentSize.Height, which can be stale during width/rotation changes; sizeThatFits.Height is the current measurement.-
src/Controls/tests/DeviceTests/Elements/Editor/EditorTests.iOS.cs:117 covers AutoSize=TextChanges growth but not disabled-auto-size scroll preservation.-
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #35662 | Track whether the finite height was substituted from SizeThatFits, skip the final clamp in that case, and use a platform auto-growth condition to preserve FAILED (Gate) |
EditorHandler.iOS.cs, EditorTests.iOS.cs |
Current PR has a compile blocker due to AllowAutoGrowth. |
scrollability. |
Code Review — Deep Analysis
Code PR #35662Review
Independent Assessment
What this changes: Updates iOS/MacCatalyst EditorHandler.GetDesiredSize to avoid treating SizeThatFits-derived height as a hard cap, plus adds iOS Editor device tests.
Inferred motivation: Fix Editor.HeightRequest being ignored for Center/End vertical text alignment in infinite-height layouts.
Reconciliation with PR Narrative
Author claims: SizeThatFits was incorrectly clamping the resolved HeightRequest; the new flag distinguishes content measurement from real bounds.
Agreement/disagreement: Intent matches the code, but implementation references a nonexistent API.
Findings
iOS Editor handler references nonexistent AllowAutoGrowthError ####
src/Core/src/Handlers/Editor/EditorHandler.iOS.cs:84 uses PlatformView.AllowAutoGrowth, but MauiTextView has no such member. CI confirms CS1061 failures across MAUI build/pack jobs.
overflow decision should use current measurement, not potentially stale ContentSizeError ####
src/Core/src/Handlers/Editor/EditorHandler.iOS.cs:86 uses PlatformView.ContentSize.Height even though sizeThatFits was just computed for the current constraints. During width/rotation changes, ContentSize can lag behind the measurement currently being resolved.
test coverage exercises AutoSize=TextChanges but not disabled-auto-size scroll preservationWarning ####
src/Controls/tests/DeviceTests/Elements/Editor/EditorTests.iOS.cs:117 validates auto-growing Editors after a width change, but the handler branch being protected is disabled auto-size + overflowing content preserving scrollability.
Devil's Advocate
The measurement approach appears plausible, but the compile break is definitive and blocks behavioral validation. The stale ContentSize concern may not reproduce in every layout pass, but using the freshly measured value is safer and more directly tied to the current constraints.
Verdict: NEEDS_CHANGES
Confidence: high
Summary: PR currently does not compile. The intended distinction between content-derived measurement and real bounds is directionally reasonable, but the implementation needs a valid Core abstraction and stronger scrollability coverage.
Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix-1 | Use Core VirtualView.Height explicit-dimension metadata when infinite height must be substituted, instead of using SizeThatFits.Height for explicit ` BLOCKED |
1 file | Compiled/deployed, but iOS simulator app startup failed with AOT module loading error for Microsoft.Maui.Controls.Xaml; no behavioral result. |
HeightRequest`. |
| 2 | try-fix-2 | Temporarily neutralize while calling , restore it in , then keep the existing base desired-size flow. | PASS | 1 file | Passed all targeted iOS device tests; avoids PR's nonexistent AllowAutoGrowth, avoids extra clamp state, and addresses measurement contamination directly. |
| PR | PR #35662 | Track whether height was substituted from SizeThatFits; skip final clamp for content-derived heights and use AllowAutoGrowth/ContentSize to preserve FAILED (Gate) |
2 files | Compile blocker: MauiTextView has no AllowAutoGrowth; also uses potentially stale ContentSize. |
scrollability. |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| claude-opus-4.6 | 1 | Yes | Candidate 1: use Core explicit dimension metadata to avoid treating contaminated SizeThatFits as the resolved height for explicit HeightRequest. |
| maui-expert-reviewer + claude-opus-4.7 | 1 | Yes | Candidate 2: sanitize/restore UITextView.ContentOffset around measurement so vertical-alignment scroll offset cannot poison SizeThatFits. |
Exhausted: stopped because Candidate #2 passed all targeted tests and is demonstrably better than the PR's current fix.No
Selected Fix: Candidate # it passes the targeted iOS device tests, removes the PR's compile blocker, preserves scroll offset with finally, and fixes the measurement root cause without introducing handler-visible auto-growth state or broad clamp logic.2
try-fix-1
Approach: Use Dimension.IsExplicitSet(VirtualView.Height) to substitute explicit height for infinite height constraints.
Diff: See CustomAgentLogsTmp/PRState/35662/PRAgent/try-fix/attempt-1/fix.diff.
Test Results: Blocked. The command compiled/deployed, but the iOS simulator app startup failed with an AOT module loading error for Microsoft.Maui.Controls.Xaml; tests did not execute.
Failure Analysis: The approach could not be behaviorally validated. It avoids the PR compile blocker, but it is less root-cause-oriented than Candidate #2 because it relies on explicit height metadata rather than preventing contaminated native measurement.
try-fix-2
Approach: Save PlatformView.ContentOffset, set it to CGPoint.Empty only when needed before SizeThatFits, and restore the saved value in finally. This prevents Center/End vertical-alignment offset from influencing UITextView.SizeThatFits.
Diff: See CustomAgentLogsTmp/PRState/35662/PRAgent/try-fix/attempt-2/fix.diff.
Test Results: Pass. The targeted iOS device test command completed with XHarness exit 0: all 9 EditorHeightIsConsistentAcrossAllTextAlignments alignment cases plus AutoSizeTextChangesEditorGrowsAfterRotation passed.
Failure Analysis: Not applicable. Self-review recorded one minor consideration: temporarily mutating ContentOffset could theoretically emit scroll/KVO notifications, mitigated by only changing it when non-zero and restoring immediately.
Report — Final Recommendation
Comparative Report — PR #35662
Ranking
| Rank | Candidate | Regression result | Assessment |
|---|---|---|---|
| 1 | try-fix-2 |
PASS | Best candidate. It removes the apparent root cause by temporarily clearing UITextView.ContentOffset during SizeThatFits, restores it in finally, avoids the PR compile blocker, and passed all targeted iOS device tests. |
| 2 | pr-plus-reviewer |
Not independently run | Applying reviewer feedback points toward the same root-cause approach as try-fix-2, but this PR-derived candidate was not separately tested in this phase. |
| 3 | try-fix-1 |
BLOCKED | Compiled/deployed but test execution was blocked by an iOS simulator AOT module load issue. It may be viable, but it is less root-cause-oriented because it special-cases explicit VirtualView.Height. |
| 4 | pr |
FAILED | Must rank below passing candidates. It references nonexistent PlatformView.AllowAutoGrowth, causing a compile blocker, and relies on potentially stale ContentSize.Height during measurement. |
Candidate analysis
pr
The submitted PR attempts to distinguish content-derived infinite-height substitution from real frame bounds and skip the final clamp when the substituted height came from SizeThatFits. The intent matches the issue, but the implementation is not mergeable because MauiTextView has no AllowAutoGrowth member. Even if compilation were fixed, the overflow decision uses PlatformView.ContentSize.Height, which can be stale during width/rotation measurement changes.
pr-plus-reviewer
The expert reviewer feedback removes the invalid AllowAutoGrowth dependency and rejects stale ContentSize branch selection. The practical sandbox version is to neutralize ContentOffset around SizeThatFits and restore it immediately, which is equivalent to the tested try-fix-2 approach. Because this candidate itself was not independently run after applying the feedback, it ranks below the tested passing candidate.
try-fix-1
This candidate uses Dimension.IsExplicitSet(VirtualView.Height) to preserve explicit HeightRequest when the incoming height constraint is infinite. It avoids the PR's nonexistent platform property and is small, but test execution was blocked, and the approach is narrower than the observed native measurement contamination.
try-fix-2
This candidate saves PlatformView.ContentOffset, temporarily sets it to CGPoint.Empty only when needed, calls SizeThatFits, and restores the saved offset in finally. It addresses the root cause without new public API, Controls-only state, or broad clamp logic. It passed the targeted iOS device tests: all 9 EditorHeightIsConsistentAcrossAllTextAlignments combinations plus AutoSizeTextChangesEditorGrowsAfterRotation.
Winner
try-fix-2 is the single winning candidate. It is the only candidate with a successful targeted iOS regression result and avoids the PR's compile blocker while addressing the measurement contamination directly.
Future Action — alternative fix proposed (try-fix-2)
Automated review — alternative fix proposed
The expert-reviewer evaluation compared the PR fix against automatically generated candidates and selected try-fix-2 as the strongest fix.
Why: try-fix-2 won because it is the only candidate with passing targeted iOS regression tests and it fixes the measurement root cause by neutralizing UITextView.ContentOffset around SizeThatFits. The raw PR fix fails due to a nonexistent AllowAutoGrowth property, while pr-plus-reviewer was not independently validated as a PR candidate.
Please consider applying the candidate diff below (or use it as guidance). Once you push an update, this workflow will re-trigger and re-evaluate.
Candidate diff (try-fix-2)
diff --git a/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs b/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs
index aaf1a2ec7e..7404ad5330 100644
--- a/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs
+++ b/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs
@@ -58,9 +58,33 @@ namespace Microsoft.Maui.Handlers
{
// If we drop an infinite value into base.GetDesiredSize for the Editor, we'll
// get an exception; it doesn't know what do to with it. So instead we'll size
- // it to fit its current contents and use those values to replace infinite constraints
+ // it to fit its current contents and use those values to replace infinite constraints.
+ //
+ // UITextView.SizeThatFits is influenced by the current ContentOffset/content insets,
+ // which MAUI manipulates to implement VerticalTextAlignment (Center/End offset the
+ // content within the text view). A non-zero offset contaminates the measurement and
+ // causes SizeThatFits to under-report the intrinsic content height, which in turn
+ // makes the Editor render shorter than its HeightRequest when placed in an
+ // infinite-height layout. Temporarily neutralize the offset, take the measurement,
+ // and restore the original offset so the user-visible scroll position is unchanged.
+ var savedContentOffset = PlatformView.ContentOffset;
+ CGSize sizeThatFits;
+ try
+ {
+ if (savedContentOffset != CGPoint.Empty)
+ {
+ PlatformView.ContentOffset = CGPoint.Empty;
+ }
- var sizeThatFits = PlatformView.SizeThatFits(new CGSize(widthConstraint, heightConstraint));
+ sizeThatFits = PlatformView.SizeThatFits(new CGSize(widthConstraint, heightConstraint));
+ }
+ finally
+ {
+ if (PlatformView.ContentOffset != savedContentOffset)
+ {
+ PlatformView.ContentOffset = savedContentOffset;
+ }
+ }
if (double.IsInfinity(widthConstraint))
{
31b8659 to
d3764cf
Compare
The build error mentioned in the PR AI summary was caused by previous branch retargeting changes between inflight/current and main. The issue occurred because some changes related to the inflight/current branch code changes related to the Editor were not moved correctly after the PR was retargeted to main. As a result, the build error was introduced and reported in the AI summary. Now, the PR is targeting inflight/current, and the build is passing without any issues. |
|
/review -b feature/enhanced-reviewer |
…est when VerticalTextAlignment is Center or End under infinite height constraints on iOS and macOS.
d3764cf to
261b357
Compare
@kubaflo, This PR is now ready for review. |
MauiBot
left a comment
There was a problem hiding this comment.
AI Review Summary
@BagavathiPerumal — new AI review results are available based on this last commit:
261b357.
fix-35615: Made code changes to fix Editor height ignoring HeightRequest when VerticalTextAlignment is Center or End under infinite height constraints on iOS and macOS. 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) |
|---|---|---|
📱 EditorTests (EditorHeightIsConsistentAcrossAllTextAlignments) Category=Editor |
✅ FAIL — 12s | ✅ PASS — 323s |
🔴 Without fix — 📱 EditorTests (EditorHeightIsConsistentAcrossAllTextAlignments): FAIL ✅ · 12s
Determining projects to restore...
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 3.5 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 3.63 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 7.68 sec).
/Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests.Runners/TestUtils.DeviceTests.Runners.csproj : warning NU1608: Detected package version outside of dependency constraint: xunit.core 2.9.0 requires xunit.extensibility.execution (= 2.9.0) but version xunit.extensibility.execution 2.9.3 was resolved. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/Core/tests/DeviceTests.Shared/Core.DeviceTests.Shared.csproj : warning NU1608: Detected package version outside of dependency constraint: xunit.core 2.9.0 requires xunit.extensibility.execution (= 2.9.0) but version xunit.extensibility.execution 2.9.3 was resolved. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj : warning NU1608: Detected package version outside of dependency constraint: xunit.core 2.9.0 requires xunit.extensibility.core (= 2.9.0) but version xunit.extensibility.core 2.9.3 was resolved.
/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj : warning NU1608: Detected package version outside of dependency constraint: xunit.core 2.9.0 requires xunit.extensibility.execution (= 2.9.0) but version xunit.extensibility.execution 2.9.3 was resolved.
/Users/cloudtest/vss/_work/1/s/src/Core/tests/DeviceTests.Shared/Core.DeviceTests.Shared.csproj : error NU1107: Version conflict detected for xunit.extensibility.core. Install/reference xunit.extensibility.core 2.9.3 directly to project Microsoft.Maui.DeviceTests.Shared to resolve this issue. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/Core/tests/DeviceTests.Shared/Core.DeviceTests.Shared.csproj : error NU1107: Microsoft.Maui.DeviceTests.Shared -> Microsoft.DotNet.XHarness.TestRunners.Xunit 11.0.0-prerelease.26230.4 -> xunit.extensibility.execution 2.9.3 -> xunit.extensibility.core (= 2.9.3) [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/Core/tests/DeviceTests.Shared/Core.DeviceTests.Shared.csproj : error NU1107: Microsoft.Maui.DeviceTests.Shared -> xunit 2.9.0 -> xunit.core 2.9.0 -> xunit.extensibility.core (= 2.9.0). [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests/TestUtils.DeviceTests.csproj : error NU1605: Warning As Error: Detected package downgrade: xunit.extensibility.execution from 2.9.3 to 2.9.0. Reference the package directly from the project to select a different version. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests/TestUtils.DeviceTests.csproj : error NU1605: Microsoft.Maui.TestUtils.DeviceTests -> Microsoft.DotNet.XHarness.TestRunners.Xunit 11.0.0-prerelease.26230.4 -> xunit.extensibility.execution (>= 2.9.3) [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests/TestUtils.DeviceTests.csproj : error NU1605: Microsoft.Maui.TestUtils.DeviceTests -> xunit.extensibility.execution (>= 2.9.0) [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests/TestUtils.DeviceTests.csproj : error NU1605: Warning As Error: Detected package downgrade: xunit.runner.utility from 2.9.3 to 2.9.0. Reference the package directly from the project to select a different version. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests/TestUtils.DeviceTests.csproj : error NU1605: Microsoft.Maui.TestUtils.DeviceTests -> Microsoft.DotNet.XHarness.TestRunners.Xunit 11.0.0-prerelease.26230.4 -> xunit.runner.utility (>= 2.9.3) [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests/TestUtils.DeviceTests.csproj : error NU1605: Microsoft.Maui.TestUtils.DeviceTests -> xunit.runner.utility (>= 2.9.0) [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests.Runners/TestUtils.DeviceTests.Runners.csproj : error NU1107: Version conflict detected for xunit.extensibility.core. Install/reference xunit.extensibility.core 2.9.3 directly to project Microsoft.Maui.TestUtils.DeviceTests.Runners to resolve this issue. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests.Runners/TestUtils.DeviceTests.Runners.csproj : error NU1107: Microsoft.Maui.TestUtils.DeviceTests.Runners -> Microsoft.DotNet.XHarness.TestRunners.Xunit 11.0.0-prerelease.26230.4 -> xunit.extensibility.execution 2.9.3 -> xunit.extensibility.core (= 2.9.3) [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
/Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests.Runners/TestUtils.DeviceTests.Runners.csproj : error NU1107: Microsoft.Maui.TestUtils.DeviceTests.Runners -> xunit 2.9.0 -> xunit.core 2.9.0 -> xunit.extensibility.core (= 2.9.0). [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj]
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 8.18 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 8.2 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 8.19 sec).
Failed to restore /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests/TestUtils.DeviceTests.csproj (in 4.55 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Core/maps/src/Maps.csproj (in 8.21 sec).
Failed to restore /Users/cloudtest/vss/_work/1/s/src/Core/tests/DeviceTests.Shared/Core.DeviceTests.Shared.csproj (in 8.19 sec).
Failed to restore /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests.Runners/TestUtils.DeviceTests.Runners.csproj (in 8.19 sec).
/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj : error NU1605: Warning As Error: Detected package downgrade: xunit.runner.utility from 2.9.3 to 2.9.0. Reference the package directly from the project to select a different version.
/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj : error NU1605: Microsoft.Maui.Controls.DeviceTests -> Microsoft.Maui.DeviceTests.Shared -> Microsoft.DotNet.XHarness.TestRunners.Xunit 11.0.0-prerelease.26230.4 -> xunit.runner.utility (>= 2.9.3)
/Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj : error NU1605: Microsoft.Maui.Controls.DeviceTests -> Microsoft.Maui.DeviceTests.Shared -> xunit.runner.utility (>= 2.9.0)
Failed to restore /Users/cloudtest/vss/_work/1/s/src/Controls/tests/DeviceTests/Controls.DeviceTests.csproj (in 4.74 sec).
Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 69 ms).
Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/DeviceTests.Runners.SourceGen/TestUtils.DeviceTests.Runners.SourceGen.csproj (in 901 ms).
🟢 With fix — 📱 EditorTests (EditorHeightIsConsistentAcrossAllTextAlignments): PASS ✅ · 323s
(truncated to last 15,000 chars)
mework=net10.0-ios26.0]
1 Warning(s)
0 Error(s)
Time Elapsed 00:04:24.27
[11.0.0-prerelease.26230.4+92962e5c46ac08a66ded4c5696209cc60f1a232f] XHarness command issued: apple test --app artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app --target ios-simulator-64_26.0 --device D2E6F588-8114-425A-A74A-7679A26325FF -o artifacts/log --timeout 01:00:00 -v --set-env=TestFilter=Category=Editor
�[40m�[32minfo�[39m�[22m�[49m: Preparing run for ios-simulator-64_26.0 targeting D2E6F588-8114-425A-A74A-7679A26325FF
�[40m�[32minfo�[39m�[22m�[49m: Looking for available ios-simulator-64_26.0 simulators..
�[40m�[37mdbug�[39m�[22m�[49m: Looking for available ios-simulator-64_26.0 simulators. Storing logs into list-ios-simulator-64_26.0-20260604_041849.log
�[40m�[32minfo�[39m�[22m�[49m: Found simulator device 'iPhone 11 Pro'
�[40m�[32minfo�[39m�[22m�[49m: Getting app bundle information from '/Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app'..
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling any previous instance of 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.0.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'com.microsoft.maui.controls.devicetests' was uninstalled successfully
�[40m�[32minfo�[39m�[22m�[49m: Installing application 'Microsoft.Maui.Controls.DeviceTests' on 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: Installing '/Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app' to 'iPhone 11 Pro' (145.28 MB)
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Users/cloudtest/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26230.4/tools/net10.0/any/../../../runtimes/any/native/mlaunch/bin/mlaunch
�[40m�[37mdbug�[39m�[22m�[49m: Process mlaunch exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'Microsoft.Maui.Controls.DeviceTests' was installed successfully on 'iPhone 11 Pro'
�[40m�[32minfo�[39m�[22m�[49m: Starting test run for com.microsoft.maui.controls.devicetests..
�[40m�[37mdbug�[39m�[22m�[49m: *** Executing 'Microsoft.Maui.Controls.DeviceTests' on ios-simulator-64_26.0 'iPhone 11 Pro' ***
�[40m�[37mdbug�[39m�[22m�[49m: Test log server listening on: 0.0.0.0:50810
�[40m�[37mdbug�[39m�[22m�[49m: System log for the 'iPhone 11 Pro' simulator is: /Users/cloudtest/Library/Logs/CoreSimulator/D2E6F588-8114-425A-A74A-7679A26325FF/system.log
�[40m�[37mdbug�[39m�[22m�[49m: Simulator 'iPhone 11 Pro' is already booted
�[40m�[37mdbug�[39m�[22m�[49m: Scanning log stream for Microsoft.Maui.Controls.DeviceTests into '/Users/cloudtest/vss/_work/1/s/artifacts/log/Microsoft.Maui.Controls.DeviceTests.log'..
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.0.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Launching the app
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Users/cloudtest/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26230.4/tools/net10.0/any/../../../runtimes/any/native/mlaunch/bin/mlaunch
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 137
�[40m�[37mdbug�[39m�[22m�[49m: Process mlaunch exited with 0
�[40m�[37mdbug�[39m�[22m�[49m: Test run completed
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /bin/bash
�[40m�[37mdbug�[39m�[22m�[49m: Process bash exited with 0
�[40m�[37mdbug�[39m�[22m�[49m: Test run succeeded
�[40m�[37mdbug�[39m�[22m�[49m: No crash reports, waiting 0 seconds for the crash report service...
�[40m�[32minfo�[39m�[22m�[49m: Application finished the test run successfully
�[40m�[32minfo�[39m�[22m�[49m: Tests run: 67 Passed: 67 Inconclusive: 0 Failed: 0 Ignored: 0
�[40m�[32minfo�[39m�[22m�[49m: Copying ApplicationLog logs to the main log for better failure investigation. Logs count: 1.
�[40m�[37mdbug�[39m�[22m�[49m: ==================== ApplicationLog ====================
�[40m�[37mdbug�[39m�[22m�[49m: Log file: /Users/cloudtest/vss/_work/1/s/artifacts/log/com.microsoft.maui.controls.devicetests.log
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:04.3594430] xcrun simctl launch --console --terminate-running-process D2E6F588-8114-425A-A74A-7679A26325FF com.microsoft.maui.controls.devicetests
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:13.3720290] com.microsoft.maui.controls.devicetests: 7585
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.3028380] 2026-06-04 04:19:17.301984-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] [UIKit App Config] `UIScene` lifecycle will soon be required. Failure to adopt will result in an assert in the future.
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4038800] 2026-06-04 04:19:17.403064-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] TestFilter: Category=Editor
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4347110] 2026-06-04 04:19:17.431738-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_AUTOSTART = ''
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4348810] 2026-06-04 04:19:17.431983-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_AUTOEXIT = 'true'
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4351430] 2026-06-04 04:19:17.432284-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_ENABLE_NETWORK = ''
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4352760] 2026-06-04 04:19:17.432650-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] DISABLE_SYSTEM_PERMISSION_TESTS = ''
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4353130] 2026-06-04 04:19:17.432784-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_HOSTNAME = '127.0.0.1'
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4354230] 2026-06-04 04:19:17.432941-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_TRANSPORT = ''
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4354380] 2026-06-04 04:19:17.433042-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_LOG_FILE = ''
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4354650] 2026-06-04 04:19:17.433186-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_HOSTPORT = '50810'
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4354810] 2026-06-04 04:19:17.433256-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] USE_TCP_TUNNEL = ''
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4355320] 2026-06-04 04:19:17.433330-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] RUN_END_TAG = ''
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4355510] 2026-06-04 04:19:17.433489-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_ENABLE_XML_OUTPUT = 'true'
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4355830] 2026-06-04 04:19:17.433549-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_ENABLE_XML_MODE = ''
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4356000] 2026-06-04 04:19:17.433753-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_XML_VERSION = 'xUnit'
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4356160] 2026-06-04 04:19:17.434022-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_SORTNAMES = ''
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4356280] 2026-06-04 04:19:17.434166-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_RUN_ALL = ''
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4356360] 2026-06-04 04:19:17.434316-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_SKIPPED_METHODS = ''
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4356460] 2026-06-04 04:19:17.434493-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] NUNIT_SKIPPED_CLASSES = ''
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4356760] 2026-06-04 04:19:17.434610-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] headlessrunner = 'true'
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4954910] 2026-06-04 04:19:17.492289-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] [Runner executing: Run everything]
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4955490] 2026-06-04 04:19:17.493635-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] [arm64: iOS v26.0]
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4955590] 2026-06-04 04:19:17.493805-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] [Device Name: iPhone 11 Pro]
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4955670] 2026-06-04 04:19:17.493961-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] [Device UDID: 36c56a07abda4c68a30bf632a2c765fa]
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.4955710] 2026-06-04 04:19:17.494071-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] [Device Locale: en-US]
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.5055410] 2026-06-04 04:19:17.505122-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] [Device Date/Time: 6/4/2026 4:19:17 AM]
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.5056190] 2026-06-04 04:19:17.505485-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] [Bundle: com.microsoft.maui.controls.devicetests]
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.5065500] 2026-06-04 04:19:17.506171-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] Skipping categories: Category=Accessibility, Category=Application, Category=Behavior, Category=Border, Category=BoxView, Category=Button, Category=CarouselView, Category=CheckBox, Category=CollectionView, Category=Compatibility, Category=ContentView, Category=DatePicker, Category=Dispatcher, Category=Element, Category=Entry, Category=FlexLayout, Category=FlyoutPage, Category=Frame, Category=Gesture, Category=HybridWebView, Category=Image, Category=Label, Category=Layout, Category=Lifecycle, Category=ListView, Category=Map, Category=MenuFlyout, Category=Mapper, Category=Memory, Category=Modal, Category=NavigationPage, Category=Page, Category=Path, Category=Picker, Category=RadioButton, Category=RefreshView, Category=ScrollView, Category=SearchBar, Category=Shape, Category=Shell, Category=Slider, Category=SwipeView, Category=TabbedPage, Category=TextInput, Category=Toolbar, Category=TemplatedView, Category=View, Category=VisualElement, Category=VisualElementTree, Category=WebView, Category=Window, Category=WindowOverlay, Category=Xaml
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.5115250] 2026-06-04 04:19:17.511103-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] Using reflection-based Xunit runner (threaded execution)
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.5425390] 2026-06-04 04:19:17.539826-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] Discovering: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/D2E6F588-8114-425A-A74A-7679A26325FF/data/Containers/Bundle/Application/B8503596-D455-4691-845A-EBCA68C52763/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll (method display = ClassAndMethod, method display options = None)
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.9444860] 2026-06-04 04:19:17.944019-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] Discovered: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/D2E6F588-8114-425A-A74A-7679A26325FF/data/Containers/Bundle/Application/B8503596-D455-4691-845A-EBCA68C52763/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll (found 34 of 474 test cases)
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:17.9514150] 2026-06-04 04:19:17.951015-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] Starting: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/D2E6F588-8114-425A-A74A-7679A26325FF/data/Containers/Bundle/Application/B8503596-D455-4691-845A-EBCA68C52763/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:39.6389270] 2026-06-04 04:19:39.638135-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] Finished: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/D2E6F588-8114-425A-A74A-7679A26325FF/data/Containers/Bundle/Application/B8503596-D455-4691-845A-EBCA68C52763/Microsoft.Maui.Controls.DeviceTests.app/Microsoft.Maui.Controls.DeviceTests.dll
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:39.6405660] 2026-06-04 04:19:39.640252-0700 Microsoft.Maui.Controls.DeviceTests[7585:65220] Tests run: 67 Passed: 67 Inconclusive: 0 Failed: 0 Ignored: 0
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:39.6467930] 2026-06-04 04:19:39.645796-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] Xml file was written to the provided writer.
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:39.6468700] 2026-06-04 04:19:39.646052-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289]
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:39.6468900] === TEST EXECUTION SUMMARY ===
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:39.6469000] Tests run: 67 Passed: 67 Inconclusive: 0 Failed: 0 Ignored: 0 Skipped: 0
�[40m�[37mdbug�[39m�[22m�[49m: [04:19:39.6470160] 2026-06-04 04:19:39.646764-0700 Microsoft.Maui.Controls.DeviceTests[7585:64289] Test results saved to: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/D2E6F588-8114-425A-A74A-7679A26325FF/data/Containers/Data/Application/50AD1688-448F-49BC-9217-BBB04DC0F45D/Documents/test-results.xml
�[40m�[37mdbug�[39m�[22m�[49m: ==================== End of ApplicationLog ====================
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling the application 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m:
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.0.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'com.microsoft.maui.controls.devicetests' was uninstalled successfully
�[40m�[32minfo�[39m�[22m�[49m: <<XHARNESS_RESULT_START>>
{
"version": 1,
"machineName": "WCJXC4KF4V-1",
"exitCode": 0,
"exitCodeName": "SUCCESS",
"platform": "apple",
"device": "iPhone 11 Pro",
"deviceOsVersion": "26.0",
"files": [
{
"name": "test-ios-simulator-64_26.0-D2E6F588-8114-425A-A74A-7679A26325FF.log",
"type": "executionlog"
},
{
"name": "list-ios-simulator-64_26.0-20260604_041849.log",
"type": "devicelist"
},
{
"name": "test-ios-simulator-64_26.0-20260604_041856.log",
"type": "testlog"
},
{
"name": "iPhone 11 Pro.log",
"type": "systemlog"
},
{
"name": "Microsoft.Maui.Controls.DeviceTests.log",
"type": "systemlog"
},
{
"name": "com.microsoft.maui.controls.devicetests.log",
"type": "applicationlog"
},
{
"name": "xunit-test-ios-simulator-64_26.0-20260604_041856.xml",
"type": "xmllog"
}
]
}
<<XHARNESS_RESULT_END>>
XHarness exit code: 0
Passed: 0
Failed: 0
Tests completed successfully
📁 Fix files reverted (259 files)
eng/Signing.propseng/Versions.propseng/devices/run-windows-devicetests.cmdeng/devices/windows.cakeeng/pipelines/ci-copilot.ymlsrc/BlazorWebView/src/Maui/Android/BlazorAndroidWebView.cssrc/BlazorWebView/src/Maui/Android/BlazorWebViewHandler.Android.cssrc/BlazorWebView/src/Maui/Android/WebKitWebViewClient.cssrc/Compatibility/Core/src/Android/CollectionView/TemplatedItemViewHolder.cssrc/Compatibility/Core/src/Android/Renderers/SwipeViewRenderer.cssrc/Compatibility/Core/src/MacOS/Extensions/NSMenuExtensions.cssrc/Compatibility/Core/src/Windows/CollectionView/ItemContentControl.cssrc/Compatibility/Core/src/iOS/CollectionView/TemplatedCell.cssrc/Compatibility/Core/src/iOS/EventTracker.cssrc/Compatibility/Core/src/iOS/Renderers/SwipeViewRenderer.cssrc/Compatibility/Core/src/iOS/Renderers/UIContainerCell.cssrc/Controls/src/Build.Tasks/SetPropertiesVisitor.cssrc/Controls/src/Core/ActionSheetArguments.cssrc/Controls/src/Core/AlertArguments.cssrc/Controls/src/Core/BindableObject.cssrc/Controls/src/Core/Border/Border.cssrc/Controls/src/Core/Button/Button.iOS.cssrc/Controls/src/Core/Compatibility/Android/Resources/layout/flyoutcontent.axmlsrc/Controls/src/Core/Compatibility/Handlers/FlyoutPage/iOS/PhoneFlyoutPageRenderer.cssrc/Controls/src/Core/Compatibility/Handlers/NavigationPage/iOS/NavigationRenderer.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/Android/SearchHandlerAppearanceTracker.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/Android/ShellFlyoutRecyclerAdapter.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/Android/ShellFlyoutTemplatedContentRenderer.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/Android/ShellFragmentStateAdapter.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/Android/ShellItemRenderer.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/Android/ShellRenderer.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/Android/ShellSectionRenderer.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/Android/ShellToolbarTracker.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/iOS/SearchHandlerAppearanceTracker.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellPageRendererTracker.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellRenderer.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRenderer.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRootRenderer.cssrc/Controls/src/Core/Compatibility/Handlers/Shell/iOS/UIContainerCell.cssrc/Controls/src/Core/Compatibility/Handlers/TabbedPage/iOS/TabbedRenderer.cssrc/Controls/src/Core/ContentPage/ContentPage.cssrc/Controls/src/Core/ContentView/ContentView.cssrc/Controls/src/Core/Editor/Editor.Mapper.cssrc/Controls/src/Core/Editor/Editor.iOS.cssrc/Controls/src/Core/Element/Element.cssrc/Controls/src/Core/Entry/Entry.Mapper.cssrc/Controls/src/Core/Entry/Entry.iOS.cssrc/Controls/src/Core/FlyoutPage/FlyoutPage.cssrc/Controls/src/Core/FormattedString.cssrc/Controls/src/Core/GestureElement.cssrc/Controls/src/Core/Handlers/Items/Android/Adapters/EmptyViewAdapter.cssrc/Controls/src/Core/Handlers/Items/Android/Adapters/GroupableItemsViewAdapter.cssrc/Controls/src/Core/Handlers/Items/Android/Adapters/ItemsViewAdapter.cssrc/Controls/src/Core/Handlers/Items/Android/ItemContentView.cssrc/Controls/src/Core/Handlers/Items/Android/MauiCarouselRecyclerView.cssrc/Controls/src/Core/Handlers/Items/Android/MauiRecyclerView.cssrc/Controls/src/Core/Handlers/Items/Android/SimpleViewHolder.cssrc/Controls/src/Core/Handlers/Items/Android/SizedItemContentView.cssrc/Controls/src/Core/Handlers/Items/Android/TemplatedItemViewHolder.cssrc/Controls/src/Core/Handlers/Items/CarouselViewHandler.Android.cssrc/Controls/src/Core/Handlers/Items/CarouselViewHandler.Windows.cssrc/Controls/src/Core/Handlers/Items/CarouselViewHandler.cssrc/Controls/src/Core/Handlers/Items/ItemsViewHandler.cssrc/Controls/src/Core/Handlers/Items/ItemsViewHandler.iOS.cssrc/Controls/src/Core/Handlers/Items/StructuredItemsViewHandler.Android.cssrc/Controls/src/Core/Handlers/Items/Tizen/ItemTemplateAdaptor.cssrc/Controls/src/Core/Handlers/Items/iOS/CarouselViewController.cssrc/Controls/src/Core/Handlers/Items/iOS/ItemsViewController.cssrc/Controls/src/Core/Handlers/Items/iOS/SelectableItemsViewController.cssrc/Controls/src/Core/Handlers/Items/iOS/TemplatedCell.cssrc/Controls/src/Core/Handlers/Items2/CarouselViewHandler2.iOS.cssrc/Controls/src/Core/Handlers/Items2/ItemsViewHandler2.iOS.cssrc/Controls/src/Core/Handlers/Items2/iOS/CarouselViewController2.cssrc/Controls/src/Core/Handlers/Items2/iOS/GroupableItemsViewController2.cssrc/Controls/src/Core/Handlers/Items2/iOS/ItemsViewController2.cssrc/Controls/src/Core/Handlers/Items2/iOS/LayoutFactory2.cssrc/Controls/src/Core/Handlers/Items2/iOS/SelectableItemsViewController2.cssrc/Controls/src/Core/Handlers/Items2/iOS/StructuredItemsViewController2.cssrc/Controls/src/Core/Handlers/Items2/iOS/TemplatedCell2.cssrc/Controls/src/Core/Handlers/Shapes/Polygon/PolygonHandler.Android.cssrc/Controls/src/Core/Handlers/Shapes/Polygon/PolygonHandler.Tizen.cssrc/Controls/src/Core/Handlers/Shapes/Polygon/PolygonHandler.Windows.cssrc/Controls/src/Core/Handlers/Shapes/Polygon/PolygonHandler.cssrc/Controls/src/Core/Handlers/Shapes/Polygon/PolygonHandler.iOS.cssrc/Controls/src/Core/Handlers/Shapes/Polyline/PolylineHandler.Android.cssrc/Controls/src/Core/Handlers/Shapes/Polyline/PolylineHandler.Tizen.cssrc/Controls/src/Core/Handlers/Shapes/Polyline/PolylineHandler.Windows.cssrc/Controls/src/Core/Handlers/Shapes/Polyline/PolylineHandler.cssrc/Controls/src/Core/Handlers/Shapes/Polyline/PolylineHandler.iOS.cssrc/Controls/src/Core/Handlers/Shell/ShellHandler.Windows.cssrc/Controls/src/Core/Handlers/Shell/ShellItemHandler.Windows.cssrc/Controls/src/Core/Handlers/Shell/ShellSectionHandler.Windows.cssrc/Controls/src/Core/Handlers/Shell/Windows/ShellFlyoutItemView.cssrc/Controls/src/Core/Handlers/Shell/Windows/ShellView.cssrc/Controls/src/Core/Hosting/AppHostBuilderExtensions.cssrc/Controls/src/Core/ImageElement.cssrc/Controls/src/Core/IndicatorView/IndicatorStackLayout.cssrc/Controls/src/Core/InputView/InputView.cssrc/Controls/src/Core/Internals/WeakEventProxy.cssrc/Controls/src/Core/Items/SelectionList.cssrc/Controls/src/Core/Label/Label.Mapper.cssrc/Controls/src/Core/Label/Label.cssrc/Controls/src/Core/Label/Label.iOS.cssrc/Controls/src/Core/Layout/Layout.cssrc/Controls/src/Core/ListView/ListView.cssrc/Controls/src/Core/NavigationPage/NavigationPage.cssrc/Controls/src/Core/NavigationPage/NavigationPageToolbar.cssrc/Controls/src/Core/Page/Page.cssrc/Controls/src/Core/Picker/Picker.cssrc/Controls/src/Core/Platform/AlertManager/AlertManager.cssrc/Controls/src/Core/Platform/Android/DragAndDropGestureHandler.cssrc/Controls/src/Core/Platform/Android/Extensions/ToolbarExtensions.cssrc/Controls/src/Core/Platform/Android/GenericAnimatorListener.cssrc/Controls/src/Core/Platform/Android/TabbedPageManager.cssrc/Controls/src/Core/Platform/GestureManager/GesturePlatformManager.iOS.cssrc/Controls/src/Core/Platform/Windows/CollectionView/ItemContentControl.cssrc/Controls/src/Core/Platform/Windows/CollectionView/ScrollHelpers.cssrc/Controls/src/Core/Platform/iOS/Extensions/FormattedStringExtensions.cssrc/Controls/src/Core/PromptArguments.cssrc/Controls/src/Core/PublicAPI/net-android/PublicAPI.Unshipped.txtsrc/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txtsrc/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txtsrc/Controls/src/Core/PublicAPI/net-tizen/PublicAPI.Unshipped.txtsrc/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Unshipped.txtsrc/Controls/src/Core/PublicAPI/net/PublicAPI.Unshipped.txtsrc/Controls/src/Core/PublicAPI/netstandard/PublicAPI.Unshipped.txtsrc/Controls/src/Core/RadioButton/RadioButton.cssrc/Controls/src/Core/ResourcesExtensions.cssrc/Controls/src/Core/ScrollView/ScrollView.cssrc/Controls/src/Core/Setter.cssrc/Controls/src/Core/Shell/Shell.cssrc/Controls/src/Core/Shell/ShellNavigationManager.cssrc/Controls/src/Core/Shell/ShellSection.cssrc/Controls/src/Core/SwipeView/SwipeItem.cssrc/Controls/src/Core/SwipeView/SwipeItemView.cssrc/Controls/src/Core/SwipeView/SwipeItems.cssrc/Controls/src/Core/SwipeView/SwipeView.cssrc/Controls/src/Core/Toolbar/Toolbar.Android.cssrc/Controls/src/Core/VisualElement/VisualElement.cssrc/Controls/src/Core/VisualStateManager.cssrc/Controls/src/Core/WebView/WebViewSource.cssrc/Controls/src/Core/Window/Window.Android.cssrc/Controls/src/Core/Window/Window.cssrc/Controls/src/SourceGen/NodeSGExtensions.cssrc/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformWrapperView.javasrc/Core/maps/src/Handlers/Map/MapHandler.Android.cssrc/Core/maps/src/Handlers/Map/MapHandler.iOS.cssrc/Core/maps/src/Platform/iOS/MauiMKMapView.cssrc/Core/src/Animations/AnimationManager.cssrc/Core/src/Core/IMauiRecyclerView.cssrc/Core/src/Core/ISafeAreaView2.cssrc/Core/src/Diagnostics/DiagnosticsManager.cssrc/Core/src/Diagnostics/IDiagnosticsManager.cssrc/Core/src/Diagnostics/Instrumentation/DiagnosticInstrumentation.cssrc/Core/src/Diagnostics/Instrumentation/LayoutArrangeInstrumentation.cssrc/Core/src/Diagnostics/Instrumentation/LayoutDiagnosticMetrics.cssrc/Core/src/Diagnostics/Instrumentation/LayoutMeasureInstrumentation.cssrc/Core/src/Graphics/MauiDrawable.Android.cssrc/Core/src/Handlers/Button/ButtonHandler.cssrc/Core/src/Handlers/Button/ButtonHandler.iOS.cssrc/Core/src/Handlers/DatePicker/DatePickerHandler.Android.cssrc/Core/src/Handlers/DatePicker/DatePickerHandler.MacCatalyst.cssrc/Core/src/Handlers/Editor/EditorHandler.iOS.cssrc/Core/src/Handlers/Entry/EntryHandler.cssrc/Core/src/Handlers/Entry/EntryHandler.iOS.cssrc/Core/src/Handlers/FlyoutView/FlyoutViewHandler.Android.cssrc/Core/src/Handlers/HybridWebView/HybridWebViewHandler.Windows.cssrc/Core/src/Handlers/Image/ImageHandler.Windows.cssrc/Core/src/Handlers/Image/ImageHandler.iOS.cssrc/Core/src/Handlers/Label/LabelHandler.cssrc/Core/src/Handlers/Label/LabelHandler.iOS.cssrc/Core/src/Handlers/Picker/PickerHandler.Windows.cssrc/Core/src/Handlers/Picker/PickerHandler.iOS.cssrc/Core/src/Handlers/ProgressBar/ProgressBarHandler.iOS.cssrc/Core/src/Handlers/RefreshView/RefreshViewHandler.Windows.cssrc/Core/src/Handlers/ScrollView/ScrollViewHandler.Android.cssrc/Core/src/Handlers/ScrollView/ScrollViewHandler.Windows.cssrc/Core/src/Handlers/ScrollView/ScrollViewHandler.iOS.cssrc/Core/src/Handlers/SearchBar/SearchBarHandler.iOS.cssrc/Core/src/Handlers/SearchBar/SearchBarHandler2.Android.cssrc/Core/src/Handlers/Stepper/StepperHandler.iOS.cssrc/Core/src/Handlers/SwipeItemMenuItem/SwipeItemMenuItemHandler.Android.cssrc/Core/src/Handlers/SwipeItemMenuItem/SwipeItemMenuItemHandler.Windows.cssrc/Core/src/Handlers/SwipeItemMenuItem/SwipeItemMenuItemHandler.cssrc/Core/src/Handlers/SwipeItemMenuItem/SwipeItemMenuItemHandler.iOS.cssrc/Core/src/Handlers/Switch/SwitchHandler.iOS.cssrc/Core/src/Handlers/View/ViewHandler.cssrc/Core/src/Handlers/WebView/WebViewHandler.Android.cssrc/Core/src/Hosting/LifecycleEvents/AppHostBuilderExtensions.Android.cssrc/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cssrc/Core/src/Layouts/Flex.cssrc/Core/src/Platform/Android/ActivityIndicatorExtensions.cssrc/Core/src/Platform/Android/ActivityResultCallbackRegistry.cssrc/Core/src/Platform/Android/BorderDrawable.cssrc/Core/src/Platform/Android/ContentViewGroup.cssrc/Core/src/Platform/Android/EditTextExtensions.cssrc/Core/src/Platform/Android/LayoutViewGroup.cssrc/Core/src/Platform/Android/MauiAppCompatActivity.Lifecycle.cssrc/Core/src/Platform/Android/MauiAppCompatActivity.cssrc/Core/src/Platform/Android/MauiHybridWebView.cssrc/Core/src/Platform/Android/MauiHybridWebViewClient.cssrc/Core/src/Platform/Android/MauiScrollView.cssrc/Core/src/Platform/Android/MauiSearchView.cssrc/Core/src/Platform/Android/MauiSwipeRefreshLayout.cssrc/Core/src/Platform/Android/MauiSwipeView.cssrc/Core/src/Platform/Android/MauiWebView.cssrc/Core/src/Platform/Android/MauiWebViewClient.cssrc/Core/src/Platform/Android/MauiWindowInsetListener.cssrc/Core/src/Platform/Android/Navigation/NavigationRootManager.cssrc/Core/src/Platform/Android/RadioButtonExtensions.cssrc/Core/src/Platform/Android/SafeAreaExtensions.cssrc/Core/src/Platform/Android/SearchViewExtensions.cssrc/Core/src/Platform/Android/SemanticExtensions.cssrc/Core/src/Platform/Android/TextViewExtensions.cssrc/Core/src/Platform/Android/ViewExtensions.cssrc/Core/src/Platform/Android/WrapperView.cssrc/Core/src/Platform/Windows/ContentPanel.cssrc/Core/src/Platform/Windows/LayoutPanel.cssrc/Core/src/Platform/Windows/PickerExtensions.cssrc/Core/src/Platform/Windows/RadioButtonExtensions.cssrc/Core/src/Platform/Windows/Styles/MauiComboBoxStyle.xamlsrc/Core/src/Platform/Windows/Styles/Resources.xamlsrc/Core/src/Platform/Windows/TextBoxExtensions.cssrc/Core/src/Platform/Windows/WebViewExtensions.cssrc/Core/src/Platform/iOS/ButtonExtensions.cssrc/Core/src/Platform/iOS/KeyboardAcceleratorExtensions.cssrc/Core/src/Platform/iOS/MauiPageControl.cssrc/Core/src/Platform/iOS/MauiScrollView.cssrc/Core/src/Platform/iOS/MauiSwipeView.cssrc/Core/src/Platform/iOS/MauiTextField.cssrc/Core/src/Platform/iOS/MauiTextView.cssrc/Core/src/Platform/iOS/MauiUIApplicationDelegate.Menu.cssrc/Core/src/Platform/iOS/MauiView.cssrc/Core/src/Platform/iOS/NoCaretField.cssrc/Core/src/Platform/iOS/PickerExtensions.cssrc/Core/src/Platform/iOS/SemanticExtensions.cssrc/Core/src/Platform/iOS/SliderExtensions.cssrc/Core/src/Platform/iOS/TabbedViewExtensions.cssrc/Core/src/Platform/iOS/TextFieldExtensions.cssrc/Core/src/PublicAPI/net-android/PublicAPI.Unshipped.txtsrc/Core/src/PublicAPI/net-ios/PublicAPI.Unshipped.txtsrc/Core/src/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txtsrc/Core/src/PublicAPI/net-windows/PublicAPI.Unshipped.txtsrc/Essentials/samples/Samples/View/ScreenshotPage.xamlsrc/Essentials/src/Browser/Browser.android.cssrc/Essentials/src/Clipboard/Clipboard.shared.cssrc/Essentials/src/FilePicker/FilePicker.tizen.cssrc/Essentials/src/MediaPicker/MediaPicker.android.cssrc/Essentials/src/MediaPicker/MediaPicker.tizen.cssrc/Essentials/src/Screenshot/Screenshot.android.cssrc/Essentials/src/TextToSpeech/TextToSpeech.ios.tvos.watchos.cssrc/Essentials/src/TextToSpeech/TextToSpeech.shared.cssrc/Essentials/src/TextToSpeech/TextToSpeech.windows.cssrc/Essentials/src/Types/Shared/WebUtils.shared.cssrc/SingleProject/Resizetizer/src/GenerateTizenManifest.cssrc/SingleProject/Resizetizer/src/SkiaSharpSvgTools.cssrc/SingleProject/Resizetizer/src/nuget/buildTransitive/Microsoft.Maui.Resizetizer.After.targetssrc/Templates/src/Microsoft.Maui.Templates.csprojsrc/Templates/src/templates/maui-mobile/MauiApp.1.csproj
New files (not reverted):
eng/devices/Run-PackagedAppAndWait.ps1src/Controls/src/Core/Platform/AlertManager/DelegateAlertSubscription.cssrc/Core/maps/src/Handlers/Map/MapElementPlatformOptions.Android.cssrc/Core/src/Platform/Android/AppbarLayoutExtensions.cssrc/Core/src/Platform/Android/IBackNavigationState.cssrc/Core/src/Platform/Android/RefreshViewWebViewScrollCapture.cssrc/Core/src/Platform/Windows/CharacterSpacingConverter.cssrc/Core/src/Platform/Windows/ContentPanelAutomationPeer.cssrc/Core/src/Platform/Windows/MauiBorderAutomationPeer.cssrc/Core/src/Platform/Windows/MauiLayoutAutomationPeer.cssrc/Core/src/Platform/iOS/MauiProgressView.cssrc/Templates/src/templates/maui-blazor-solution/.gitignoresrc/Templates/src/templates/maui-blazor/.gitignoresrc/Templates/src/templates/maui-lib/.gitignoresrc/Templates/src/templates/maui-mobile/.gitignoresrc/Templates/src/templates/maui-multiproject/.gitignore
UI Tests — ViewBaseTests
Detected UI test categories: ViewBaseTests
Pre-Flight — Context & Validation
Issue: #35615 - [MAUI] D13_Customize_Text_Alignment - Text Editor Height is not consistent
PR: #35662 - [Inflight/Current][iOS & Mac] Fix for Editor height inconsistency when VerticalTextAlignment is Center or End on iOS and MacCatalyst
Platforms Affected: iOS, MacCatalyst
Files Changed: 1 implementation, 1 test
Key Findings
- Regression affects Editor sizing on iOS/MacCatalyst when HeightRequest is used inside an infinite-height layout and vertical text alignment is Center/End.
- PR implementation changes src/Core/src/Handlers/Editor/EditorHandler.iOS.cs; because .ios.cs compiles for both iOS and MacCatalyst, both platforms are affected.
- PR test coverage adds a Controls device test matrix for all horizontal/vertical text alignment combinations in src/Controls/tests/DeviceTests/Elements/Editor/EditorTests.iOS.cs.
- Gate result supplied by caller: Gate PASSED; tests fail without fix and pass with PR fix. Gate was not re-run.
- GitHub CLI was unauthenticated; public GitHub API/curl was used for PR, issue, file, and comment context. Inline review comments were unavailable/empty through the public endpoint.
Code Review Summary
Verdict: LGTM
Confidence: medium
Errors: 0 | Warnings: 1 | Suggestions: 2
Key code review findings:
- Suggestion: New test lacks an explicit method-level Category(TestCategory.Editor); class-level category should still cover it.
- Suggestion: Test WaitForUIUpdate captures the frame after initial layout may already be complete; harmless but can wait for timeout.
- Warning: CI failure in TestCases.HostApp/Issues/Issue7814.cs appears pre-existing and unrelated to this PR.
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #35662 | Track when infinite height was substituted from SizeThatFits and skip the final clamp only for that content-measurement proxy; preserve clamp for Bounds.Height scrollability path. | PASS (Gate) | src/Core/src/Handlers/Editor/EditorHandler.iOS.cs; src/Controls/tests/DeviceTests/Elements/Editor/EditorTests.iOS.cs | Original PR; gate result provided by caller. |
Code Review — Deep Analysis
Code Review — PR #35662
Independent Assessment
What this changes: EditorHandler.GetDesiredSize on iOS/MacCatalyst now tracks how an infinite height constraint was substituted. When the substitute came from PlatformView.SizeThatFits (a content measurement), a new boolean flag heightSubstitutedFromSizeThatFits is set and the final cap at the bottom of the method is skipped. When the substitute came from PlatformView.Bounds.Height (a real frame bound, used to preserve scrollability), the flag stays false and the cap still applies.
Inferred motivation: Some UITextView state — likely the negative ContentOffset set by ShouldCenterVertically() for Center/End vertical alignment — causes SizeThatFits to report a smaller height than actual content. The handler was using that under-reported value as heightConstraint, then capping the result (which correctly resolved HeightRequest via ResolveConstraints) back down to the under-reported value. The fix disconnects the cap from the measurement-only substitution path.
Reconciliation with PR Narrative
Author claims: VerticalTextAlignment = Center | End causes a negative ContentOffset on UITextView; this alters SizeThatFits to return a smaller-than-expected value; the handler then incorrectly clamps a HeightRequest-honouring result down to that value; the fix is a flag that skips the clamp when the constraint came from SizeThatFits.
Agreement: Full agreement. The logic trace is:
- Infinite height → else branch →
heightConstraint = sizeThatFits.Height(under-reported for Center/End due to negative offset) base.GetDesiredSize→GetDesiredSizeFromHandler→ callsSizeThatFitsagain (UITextView ignores the height arg) →ResolveConstraintsreturnsHeightRequest = 100- Pre-fix cap:
100 > sizeThatFits.Height→ truncated to the under-reported value - Post-fix: flag is set → cap skipped →
HeightRequestreturned correctly
The scrollability path from PR #35309 (Bounds.Height substitution) is unaffected: heightSubstitutedFromSizeThatFits stays false there, so the cap continues to apply.
Findings
💡 Suggestion — New test lacks [Category(TestCategory.Editor)] on the method itself
EditorTests.cs (the base partial-class file) has [Category(TestCategory.Editor)] at the class level, so the attribute is inherited and the test will be picked up by Helix category filtering. However, all other directly device-test-relevant methods in EditorTests.iOS.cs that need Helix scheduling also carry an explicit [Category(TestCategory.Editor)] at the method level (e.g., AutoSizeTextChangesEditorGrowsAfterRotation does not, but the PlaceholderTests nested class does). The new test is fine as-is for CI execution, but adding [Category(TestCategory.Editor)] to the method would align it with the explicit pattern used elsewhere in platform-specific partial files and make test-filter intentions more legible without relying on class-level inheritance.
💡 Suggestion — Test's WaitForUIUpdate captures frame after potential initial layout
WaitForUIUpdate waits while editor.Frame == frame. The frame snapshot is taken inside the AttachAndRun callback. If the initial layout has already completed before the lambda runs, the captured frame is already the final frame and the wait loops for up to 1 000 ms before timing out — after which the assert fires on the correct value anyway, so the test is correct. This is a pre-existing test pattern used in CollectionViewTests as well, so it's acceptable. For future tests of this form, consider capturing frame before an explicit layout-invalidation trigger (as done in AutoSizeTextChangesEditorGrowsAfterRotation) to make the wait semantically precise and avoid the 1 s timeout path on already-laid-out views.
⚠️ CI — Build failure in TestCases.HostApp/Issues/Issue7814.cs (pre-existing, unrelated)
CI (maui-pr, build #1449275) is failing on all platforms with:
error CS1061: 'Label' does not contain a definition for 'Column'
error CS1061: 'ScrollView' does not contain a definition for 'Row'
in src/Controls/tests/TestCases.HostApp/Issues/Issue7814.cs:45,48. This file is not touched by this PR and the errors reference Grid-attachment extension methods (Column, Row) unrelated to the Editor handler. This is a pre-existing baseline failure, not introduced here. The PR author should confirm this failure existed before their branch was pushed; if it is a recent regression on main, they may need to rebase.
Devil's Advocate
"Could skipping the cap introduce a regression for an Editor without HeightRequest in an infinite container?"
Without HeightRequest, ResolveConstraints returns the measured value (content height from SizeThatFits). base.GetDesiredSize calls SizeThatFits a second time internally and gets the same content height. So result.Height ≈ sizeThatFits.Height, and the cap result.Height > heightConstraint would not have triggered anyway. Skipping it is a no-op. ✓
"Could the regression path (scrollability after rotation) be broken?"
When ContentSize.Height > Bounds.Height (scrollable, non-AutoGrowth editor), the code takes the heightConstraint = currentHeight branch and leaves heightSubstitutedFromSizeThatFits = false. The cap continues to apply, preserving the PR #35309 fix. ✓
"Is the flag initialised to the right value?"
Yes. bool heightSubstitutedFromSizeThatFits = false — default is apply the cap, which is the safer, pre-existing behaviour. The flag is only set to true through the explicit sizeThatFits else-branch. ✓
"Does this file also compile for MacCatalyst?"
EditorHandler.iOS.cs uses the .ios.cs extension, which compiles for both iOS and MacCatalyst TFMs. The PR description confirms macOS was manually tested. ✓
Verdict: LGTM
Confidence: medium
Summary: The fix is logically sound and minimal. It correctly distinguishes the two roles of heightConstraint — content measurement (no cap needed, ResolveConstraints in the base already honours HeightRequest) versus real frame bound (cap needed to preserve scrollability). The regression from PR #35309 is preserved. The test covers all 9 horizontal×vertical alignment combinations on both iOS and MacCatalyst. The only CI failures are a pre-existing unrelated build error in Issue7814.cs. Confidence is medium because UITextView's SizeThatFits interaction with negative ContentOffset cannot be fully verified statically.
Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix | Path-local early returns: clamp inline only for Bounds.Height/real-bound paths, return directly for SizeThatFits proxy path. | PASS | 1 file | Removes boolean side-channel; app log showed 67 iOS Controls tests passed, including Editor alignment matrix and rotation regression. |
| 2 | try-fix | Substitute explicit VirtualView.Height when infinite height meets HeightRequest, leaving existing clamp unchanged. | PASS | 1 file | Passes tests, but narrower than candidate 1/PR because it primarily covers explicit HeightRequest. |
| PR | PR #35662 | Track whether infinite height was substituted from SizeThatFits; skip final clamp only for that content-measurement proxy, preserve clamp for Bounds.Height. | PASS (Gate) | 2 files | Original PR; gate result supplied by caller. |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| maui-expert-reviewer | 1 | Yes | Candidate 1: restructure control flow so each sizing path owns its clamp decision. |
| maui-expert-reviewer | 1 | Yes | Candidate 2: pass explicit HeightRequest as the substituted constraint so the existing clamp is naturally a no-op. |
| maui-expert-reviewer | 2 | No | No failed candidate output to feed back; both tested alternatives passed. Candidate 1 is the strongest alternative found. |
Exhausted: Yes - after two meaningfully different passing approaches, remaining ideas would be minor variations on clamp gating or constraint substitution.
Selected Fix: Candidate #1 - It passes the iOS Controls device tests and is arguably cleaner than the PR's boolean flag because it removes cross-path state and co-locates clamp decisions with the sizing path that requires them. The PR fix remains acceptable and lower-diff; candidate #2 passed but is not selected because its correctness is tied more narrowly to explicit HeightRequest.
Report — Final Recommendation
Comparative Analysis - PR #35662
Candidates compared
| Candidate | Summary | Regression result | Assessment |
|---|---|---|---|
pr |
Submitted PR fix. Tracks whether infinite height was replaced by SizeThatFits.Height; skips the final clamp only for that measurement-proxy path and preserves the clamp for the Bounds.Height scrollability path. Includes the Editor alignment regression test. |
PASS | Correct, minimal, and covered by the supplied gate. |
pr-plus-reviewer |
PR fix after expert reviewer feedback. The expert reviewer found no actionable feedback, so this candidate is identical to pr. |
PASS | Same implementation and test evidence as pr, with an additional expert LGTM and no inline findings. |
try-fix-1 |
Replaces the PR flag with path-local early returns: the Bounds.Height branch clamps and returns immediately, while the SizeThatFits proxy branch returns the base measurement without clamping. |
PASS | Also correct and arguably clean because it co-locates each clamp decision with its measurement path. It is a stronger alternative than try-fix-2, but it is not materially safer than the reviewed PR and changes control flow more than necessary. |
try-fix-2 |
Uses explicit VirtualView.Height as the finite substitute when height is infinite and HeightRequest is set, leaving the existing final clamp in place. |
PASS | Valid for the reported HeightRequest case, but narrower: it depends on explicit HeightRequest and is less general for related constraint-resolution scenarios than the PR or try-fix-1. |
Ranking
pr-plus-reviewer- Best overall. It is the submitted PR fix, expert-reviewed with no actionable findings, and has the same passing gate evidence aspr.pr- Functionally identical to the winner, but ranked belowpr-plus-revieweronly becausepr-plus-reviewerrepresents the reviewed candidate state.try-fix-1- Passing and clean, but it does not provide a meaningful correctness advantage over the PR after expert review, and adopting it would replace an already-reviewed minimal fix.try-fix-2- Passing, but narrower than the other passing candidates because it specifically relies on explicit HeightRequest substitution.
No candidate failed regression testing, so the required failed-candidate ordering rule does not change the ranking.
Winner
Winner: pr-plus-reviewer
The winning candidate is the PR fix with reviewer feedback applied; because the expert reviewer found no actionable issues, it is identical to the submitted PR. It preserves the earlier scrollability behavior, fixes the reported infinite-height/TextAlignment path, includes regression coverage, and avoids unnecessary churn from replacing the accepted PR approach with an equivalent alternative.
Future Action — review latest findings
No alternative fix was selected for this run. Review the session findings and CI results before merging.
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Issue details
When an Editor with a HeightRequest is placed inside a VerticalStackLayout on iOS and macOS, setting VerticalTextAlignment to Center or End causes the Editor to render at the wrong height instead of the requested size. The Editor appears significantly shorter than expected, while VerticalTextAlignment.Start renders correctly. This inconsistency makes it impossible to rely on HeightRequest when using vertical text alignment on these platforms.
Root Cause
The issue occurs because of the way UITextView (which is a UIScrollView subclass) interacts with the handler's height measurement logic. When VerticalTextAlignment is set to Center or End, the platform view sets a negative ContentOffset internally to position the text. This negative offset alters the internal scroll state of the UITextView, causing SizeThatFits to return a smaller value than expected.
The handler uses this value as a substitute for the infinite height constraint before calling the base size calculation. A cap in the handler then incorrectly clamps the correctly resolved HeightRequest value down to this smaller SizeThatFits-derived value, overriding the developer's intent.
Description of Change
The fix involves introducing a boolean flag heightSubstitutedFromSizeThatFits that tracks whether the height constraint was substituted from a SizeThatFits measurement or from a real upper bound such as Bounds.Height. When the constraint is a real bound (used to preserve Editor scrollability after device rotation), the existing cap is applied as before.
When the constraint was derived from SizeThatFits (a content measurement, not a limit), the flag is set and the cap is skipped, allowing the base implementation to return the correct size that already honours HeightRequest via ResolveConstraints. This ensures HeightRequest is respected across all text alignment combinations without breaking the existing scrollability behaviour.
Regression PR
PR #35309
Tested the behavior in the following platforms.
Issues Fixed
Fixes #35615
Output
35615-BeforeFix.Mac.mov
35615-AfterFix.Mac.mov
35615-BeforeFix.iOS.mov
35615-AfterFix.iOS.mov