[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
left a comment
There was a problem hiding this comment.
Is it ready for review?
@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.
…te branch (#35920) > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ### Issue Details After PR #35309, the iOS snapshot for EditorScrollingWhenEnclosedInBorder differs from the baseline by approximately 1 px vertically. The Border outline, visible text lines, and scroll thumb endpoints are all shifted by one pixel, causing the exact-match snapshot comparison to fail. **Test name:** EditorScrollingWhenEnclosedInBorder **Cause PR:** #35309 ### Root Cause PR #35309 added a final cap in EditorHandler.GetDesiredSize that clamps result.Height to heightConstraint. PR #35662 narrowed this behavior to skip the SizeThatFits substitution path, but the cap was still applied when the caller provided a finite heightConstraint (for example, when Border measures its child). base.GetDesiredSize correctly returned the requested size, but the final cap reduced the calculated height to the Border's stroke-adjusted constraint, resulting in a 1 px vertical drift. ### Description of Change Added an else branch to the double.IsInfinity(...) check in GetDesiredSize (iOS) to mark caller-provided finite constraints using heightSubstitutedFromSizeThatFits = true. The final height cap now applies only when the height value was substituted internally, restoring the standard MAUI measure behavior for caller-provided constraints while preserving the existing behavior. ### Output | Before Issue Fix | After Issue Fix | |----------|----------| | <img width="350" height="110" src="https://github.com/user-attachments/assets/4f3d5b68-7931-4599-a869-b07c7e3bd521"> | <img width="350" height="110" src="https://github.com/user-attachments/assets/b3c883a5-0c3d-41bd-8fc6-9d127def72b9"> |
## What's Coming .NET MAUI inflight/candidate introduces significant improvements across all platforms with focus on quality, performance, and developer experience. This release includes 153 commits with various improvements, bug fixes, and enhancements. ## Activityindicator - [Android] Fix CollectionView ActivityIndicator not animating after header height change by @Vignesh-SF3580 in #35358 <details> <summary>🔧 Fixes</summary> - [CollectionView items fail to update ActivityIndicator state after header height change](#33780) </details> ## Animation - [Android] Fix Shadow property affecting transform matrix. by @Shalini-Ashokan in #32962 <details> <summary>🔧 Fixes</summary> - [[Android] Applying Shadow property affects the properties in Visual Transform Matrix](#32731) </details> ## API - Add delegate-based alert dialog extensibility convention (no public API changes) by @Redth in #35095 <details> <summary>🔧 Fixes</summary> - [Alert/Dialog system (`DisplayAlert`, `DisplayActionSheet`, `DisplayPromptAsync`) needs a public extensibility point](#34104) </details> ## Blazor - [Android] Fix for BlazorWebView predictive back callback blocks Android back-to-home animation by @BagavathiPerumal in #35538 <details> <summary>🔧 Fixes</summary> - [[Android] BlazorWebView predictive back callback blocks Android back-to-home animation](#35397) </details> - [Android] Fix BlazorWebView back callback can swallow the first Back press when its callback is stale-enabled by @devanathan-vaithiyanathan in #35611 <details> <summary>🔧 Fixes</summary> - [[inflight regression] Android BlazorWebView back callback can swallow the first Back press when its callback is stale-enabled](#35573) </details> ## Border - [Windows] Fixed the ContentView clip is not updated when wrapping inside the Border by @Ahamed-Ali in #30408 <details> <summary>🔧 Fixes</summary> - [[Windows] ContentView clip is not updated when wrapping inside the Border](#30404) </details> - Fix Border.StrokeDashArray leaks dashed Borders when using a shared Application resource by @devanathan-vaithiyanathan in #35544 <details> <summary>🔧 Fixes</summary> - [`Border.StrokeDashArray` leaks dashed Borders when using a shared Application resource](#35492) </details> - [Windows] Border: Add AutomationPeer support by @Vignesh-SF3580 in #35577 <details> <summary>🔧 Fixes</summary> - [Adding AutomationPeers to Windows Borders](#27627) </details> - [Windows] Fixed BoxView improper rendering inside Border by @Dhivya-SF4094 in #28465 <details> <summary>🔧 Fixes</summary> - [[Windows] Issues with BoxView Placement Inside Border](#19668) </details> ## Button - Prevent NullReferenceException in LayoutButton by @GamesAgeddon in #35284 <details> <summary>🔧 Fixes</summary> - [NullReferenceException on iOS in Button.LayoutButton from WrapperView.LayoutSubviews](#31048) </details> - Fix TextColor null reset to restore platform defaults on iOS and Android by @Shalini-Ashokan in #35563 <details> <summary>🔧 Fixes</summary> - [[Windows, Android, iOS & Mac]Button TextColor does not restore to platform default when reset to null after dynamic update](#35513) </details> ## CollectionView - Fix CollectionView grid spacing updates for first row and column by @KarthikRajaKalaimani in #34527 <details> <summary>🔧 Fixes</summary> - [[MAUI] I2_Vertical grid for horizontal Item Spacing and Vertical Item Spacing - horizontally updating the spacing only applies to the second column](#34257) </details> - [MacCatalyst] Fix CollectionView Header/Footer Not Expanding to Content Width by @KarthikRajaKalaimani in #35213 <details> <summary>🔧 Fixes</summary> - [[MacOS][CV2] I8_View header and footer_Horizontal_View - Footer on the right doesn't adapt when resizing the window](#35113) </details> - [iOS/MacCatalyst] Fix IndicatorView not updating when IndicatorSize is changed to default value by @Shalini-Ashokan in #35215 <details> <summary>🔧 Fixes</summary> - [[iOS/MacCatalyst] IndicatorView does not update when IndicatorSize is dynamically changed to the default value](#35214) </details> - CollectionView selecteditem background lost if collectionview (or parent) IsEnabled changed. by @KarthikRajaKalaimani in #31540 <details> <summary>🔧 Fixes</summary> - [CollectionView selecteditem background lost if collectionview (or parent) IsEnabled changed.](#20615) </details> - [iOS/macOS] CollectionView: Fix FlowDirection not working on EmptyView by @Dhivya-SF4094 in #32674 <details> <summary>🔧 Fixes</summary> - [[iOS, MacOS] FlowDirection not working on EmptyView in CollectionView](#32404) - [[iOS, Mac] CollectionView EmptyViewTemplate content text is mirrored when FlowDirection is RightToLeft](#34522) </details> - Fix iOS CollectionView stale layout invalidations by @filipnavara in #35245 <details> <summary>🔧 Fixes</summary> - [[iOS] CollectionView tries to invalidate cells with invalid indexes](#35244) </details> - Fix Android grouped CollectionView header/footer rebind leak by @AdamEssenmacher in #35368 <details> <summary>🔧 Fixes</summary> - [Memory leak when scrolling a CollectionView with IsGrouped=true](#17698) </details> - [Windows] Fix for Item should scrolled based on the GroupHeaderTemplate by @SuthiYuvaraj in #28074 <details> <summary>🔧 Fixes</summary> - [I9_Scroll by object for grouped data - The group name is always pined at the top after clicking 'Scroll to Proboscis Monkey' button](#27922) </details> - [Android] Fix ScrollTo regression when IsGrouped true on CollectionView by @SubhikshaSf4851 in #35356 <details> <summary>🔧 Fixes</summary> - [[10.0.60] ScrollTo(0) not working anymore on CollectionView when IsGrouped="True"](#35313) </details> - [Android] Fix CollectionView scrolling performance regression by @devanathan-vaithiyanathan in #35379 <details> <summary>🔧 Fixes</summary> - [[10.0.60] CollectionView scrolling performance regression](#35344) </details> - Optimize parent dynamic resource refresh by @AdamEssenmacher in #35408 <details> <summary>🔧 Fixes</summary> - [Memory usage increases when scrolling collectionview if resources count is more than 191](#22053) </details> - Fix CI failure for CollectionView Scrolling Feature Tests due to PR #35379 by @devanathan-vaithiyanathan in #35536 - [iOS & Mac] CarouselViewController2 leaks on iOS/MacCatalyst due to unremoved orientation notification observer by @SubhikshaSf4851 in #35532 <details> <summary>🔧 Fixes</summary> - [CarouselViewController2 leaks on iOS/MacCatalyst due to unremoved orientation notification observer](#35472) </details> - Fix CollectionView.SelectedItems leaks popped views when bound to a retained ObservableCollection by @HarishwaranVijayakumar in #35558 <details> <summary>🔧 Fixes</summary> - [`CollectionView.SelectedItems` leaks popped views when bound to a retained `ObservableCollection`](#35497) </details> - Fix for Android - Dynamic Updates to CollectionView Header/Footer and Templates Are Not Displayed by @SuthiYuvaraj in #28904 <details> <summary>🔧 Fixes</summary> - [Android - Dynamic Updates to CollectionView Header/Footer and Templates Are Not Displayed](#28676) </details> - [Windows] Fix CarouselView EmptyView display when filtering to zero items by @Shalini-Ashokan in #29247 <details> <summary>🔧 Fixes</summary> - [[Windows] [Scenario Day] EmptyView using Template displayed at the same time as the content](#7150) </details> - [Android/iOS] Fix IsEnabled=False on CollectionView not working by @devanathan-vaithiyanathan in #27749 <details> <summary>🔧 Fixes</summary> - [[iOS/Android] CollectionView IsEnabled Not Working](#27770) </details> - Fix CarouselView.Loop property does not update dynamically and fails to maintain the scroll position when the loop value is changed at runtime by @devanathan-vaithiyanathan in #29527 <details> <summary>🔧 Fixes</summary> - [[Android] CarouselView.Loop = false causes crash on Android when changed at runtime](#29411) - [Loop Binding in CarouselView Not Updating Dynamically at Runtime](#29449) </details> - [iOS / Mac] Fix CollectionView.ScrollTo(index) silently failing whenIsGrouped="True" by @Dhivya-SF4094 in #35609 <details> <summary>🔧 Fixes</summary> - [CollectionView.ScrollTo(index) doesn't work correctly when IsGrouped="True" on iOS, MacCatalyst, and Windows](#35326) </details> - Fix Android nested carousel scrolling by @AdamEssenmacher in #35656 <details> <summary>🔧 Fixes</summary> - [Vertical scrolling not working for CarouselView and CustomLayouts](#7814) </details> - [Inflight regression] Fixed Test failures ModalTabbedPagePushAsyncShouldOverlayBottomNavigationView and GroupedCollectionViewScrollToIndexScrollsToCorrectItem by @Dhivya-SF4094 in #35823 - Fix CarouselView tests fail in June 8 Candidate by @devanathan-vaithiyanathan in #35825 ## Core - Reduce allocations on AnimationManager by @pictos in #35612 <details> <summary>🔧 Fixes</summary> - [AnimationManager is allocating a lot](#35654) </details> ## Core Lifecycle - Fix device test memory by @pictos in #35487 <details> <summary>🔧 Fixes</summary> - [Memory leak Device.Test pass with false positive](#35485) </details> ## Datepicker - Fix MacCatalyst DatePicker focus handling by @AdamEssenmacher in #35553 <details> <summary>🔧 Fixes</summary> - [[mauipalooza] DatePicker focus only works first time](#5947) </details> ## DateTimePicker - [Android] Fix DatePicker dialog dismisses after the device is rotated by @HarishwaranVijayakumar in #34980 <details> <summary>🔧 Fixes</summary> - [[Android] [Regression] DatePicker dialog dismisses after the device is rotated](#34973) </details> ## Docs - doc: Add paragraph to README.md explaining how to fetch the `maui` project templates by @durandt in #34561 ## Drawing - [Android] Fix LinearGradientBrush rendering as opaque black box by @SubhikshaSf4851 in #35299 <details> <summary>🔧 Fixes</summary> - [[Regression] LinearGradientBrush broken on Android in 10.0.60](#35280) - [10.0.60 breaks transparency on Brushes (on Android?)](#35354) </details> - Fix polygon points collection handler leak by @AdamEssenmacher in #35526 <details> <summary>🔧 Fixes</summary> - [PolygonHandler and PolylineHandler leak when Points is replaced before disconnect](#35387) </details> ## Editor - [iOS] Fix Editor losing scrollability after rotation when CharacterSpacing is applied by @Vignesh-SF3580 in #35309 <details> <summary>🔧 Fixes</summary> - [[.NET 10][iOS] D2 - Editor can't be scrolled after rotating simulator.](#35114) </details> - [Inflight/Candidate][iOS & Mac] Fix for Editor height inconsistency when VerticalTextAlignment is Center or End on iOS and MacCatalyst by @BagavathiPerumal in #35662 <details> <summary>🔧 Fixes</summary> - [[MAUI] D13_Customize_Text_Alignment - Text Editor Height is not consistent](#35615) </details> ## Entry - [iOS/Mac] Fix Entry clear button retaining tint color after TextColor is reset to null by @SyedAbdulAzeemSF4852 in #35177 <details> <summary>🔧 Fixes</summary> - [[iOS/Mac]Entry ClearButtonVisibility color does not reset when TextColor is set to null](#35076) </details> - [iOS/MacCatalyst] Fix Entry clear button appearing dimmed compared to TextColor by @SyedAbdulAzeemSF4852 in #35541 <details> <summary>🔧 Fixes</summary> - [[MacCatalyst] [Entry] ClearButtonVisibility color appears dimmed compared to TextColor](#35517) </details> - Fix pill-shaped focus ring on macOS 26 by @Dhivya-SF4094 in #35393 <details> <summary>🔧 Fixes</summary> - [.Net 10 Picker item not centered and wrong focus outline of Entry on Mac](#34899) </details> - Fix Entry select all text on refocus not working on WinUI by @kubaflo in #35383 ## Essentials - [Android] Fix Capture video crashes after stopping recording on Android 12 by @HarishwaranVijayakumar in #35638 <details> <summary>🔧 Fixes</summary> - [Capture video crashes after stopping recording on Android 12](#28891) </details> - [Essentials] Browser.OpenAsync(External): drop visibility-filtered ResolveActivity pre-check by @Kebechet in #35652 <details> <summary>🔧 Fixes</summary> - [Browser.OpenAsync(External) on Android throws FeatureNotSupportedException for verified App Link owner URLs even with documented <queries> fix applied](#35651) </details> ## Essentials Texttospeech - [Mac, iOS, Windows] Fix for inconsistent Text-to-Speech rate behavior by @HarishwaranVijayakumar in #32850 <details> <summary>🔧 Fixes</summary> - [[Essentials] TTS rate](#32492) </details> ## Flyoutpage - [iOS/Mac] Fix FlyoutPage RTL FlowDirection is not working by @devanathan-vaithiyanathan in #34831 <details> <summary>🔧 Fixes</summary> - [[iOS/Mac] FlyoutPage RTL FlowDirection is not working properly](#34830) </details> - [Android] Fix for Android 16 Back button is not working after command from FlyoutPage by @BagavathiPerumal in #35196 <details> <summary>🔧 Fixes</summary> - [Android: BackButton on Android 16 not working after command from FlyOutPage](#33508) </details> ## Gestures - Fix DragGestureRecognizer.DropCompleted event not firing in Android platform by @KarthikRajaKalaimani in #35179 <details> <summary>🔧 Fixes</summary> - [[Android] DragGestureRecognizer.DropCompleted event not firing](#17554) </details> - Windows: Ensure layouts without background participate in hit testing by @jpd21122012 in #34364 <details> <summary>🔧 Fixes</summary> - [[Windows] TapGestureRecognizer does NOT work on a ContentView without Background](#32279) </details> - [iOS] Fix VoiceOver dropping child labels on layouts with SemanticProperties.Hint or TapGestureRecognizer by @Vignesh-SF3580 in #35590 <details> <summary>🔧 Fixes</summary> - [[iOS] VoiceOver does not correctly describe View with GestureRecognizers](#34380) </details> ## Hybridwebview - Fix RemovePossibleQueryString to also strip URL fragments by @kubaflo in #35551 <details> <summary>🔧 Fixes</summary> - [HybridWebViewQueryStringHelper.RemovePossibleQueryString removes '?' but not other special characters e.g. '#'](#31472) </details> - [Revert] - [Windows] Fix WebView blank rendering when used with HybridWebView by @SubhikshaSf4851 in #35814 ## Image - Avoid image source layout invalidation for fixed-size views by @AdamEssenmacher in #35369 <details> <summary>🔧 Fixes</summary> - [Image source swaps thrash layout under fixed constraints, tanking frame rate when scrolling virtualized collections](#32457) </details> - [Windows] Fix Image layout inconsistency caused by async decode race in GetDesiredSize by @praveenkumarkarunanithi in #34699 <details> <summary>🔧 Fixes</summary> - [[Windows] Image cropping produces inconsistent results when window is minimized or resized](#32393) </details> - [Testing] Include more testing around Windows Image Aspect recent fixes by @kubaflo in #35620 <details> <summary>🔧 Fixes</summary> - [[Testing] Include more testing around Windows Image Aspect recent fixes](#31686) </details> - Revert PR #30068 — Fix FontImageSource centering regression on Windows by @Shalini-Ashokan in #35642 <details> <summary>🔧 Fixes</summary> - [[Windows] Image with FontImageSource is not centered and gets clipped when WidthRequest/HeightRequest equals FontImageSource Size](#35618) </details> - [Android] Fix screenshot from WebView content not working by @kubaflo in #35384 <details> <summary>🔧 Fixes</summary> - [[Android] Loading the captured screenshot from webview content to Image control does not visible](#30010) </details> ## Label - Improve label mapping performance and ensure complete coverage including ToPlatform and subsequent property changes by @Tamilarasan-Paranthaman in #31159 - Fix for Label.FormattedText leaks labels when shared FormattedString is stored in Application.Resources by @BagavathiPerumal in #35582 <details> <summary>🔧 Fixes</summary> - [`Label.FormattedText` leaks labels when shared `FormattedString` is stored in `Application.Resources`](#35495) </details> - [iOS] Fix Label Span formatting test failures on candidate branch by @Vignesh-SF3580 in #35815 ## Layout - [iOS, Mac] Fix Item spacing not properly applied between items in Horizontal LinearItemsLayout by @Dhivya-SF4094 in #35445 <details> <summary>🔧 Fixes</summary> - [[CollectionView2] Item spacing not properly applied between items in Horizontal LinearItemsLayout](#35429) </details> - [Windows] Add Automation Id support for Layouts. by @SubhikshaSf4851 in #35562 <details> <summary>🔧 Fixes</summary> - [[Windows] AutomationId does not work for ContentView, Layouts and controls that inherit them](#4715) </details> - Avoid layout diagnostics allocations without listeners by @AdamEssenmacher in #35475 <details> <summary>🔧 Fixes</summary> - [MAUI 10 layout diagnostics no-consumer path is not zero-allocation](#35473) </details> - [Windows/Android] FlexLayout: Fix wrap misalignment due to floating-point precision by @SuthiYuvaraj in #31341 <details> <summary>🔧 Fixes</summary> - [FlexLayout Wrap Misalignment with Dynamically-Sized Buttons in .NET MAUI](#30957) </details> ## Listview - Fix Binding for ListView.IsRefreshing by @bill2004158 in #28516 <details> <summary>🔧 Fixes</summary> - [Bind ListView.IsRefreshing is not work.](#28514) </details> ## Map - Fix iOS/Catalyst MapPool retention with MapElements by @AdamEssenmacher in #35480 <details> <summary>🔧 Fixes</summary> - [iOS/Mac Catalyst MapHandler leaks MAUI Map views and MapElements through MapPool](#35479) </details> - Fix Android map view lifecycle cleanup by @AdamEssenmacher in #35476 <details> <summary>🔧 Fixes</summary> - [Navigating to a page with Maps multiple times Increase RAM Usage but doesn't reduce it back after navigating back](#15257) </details> - Fix Android map element options retention by @AdamEssenmacher in #35634 <details> <summary>🔧 Fixes</summary> - [[Regression] [Android] [Maps] Map locks up after rendering 50 Polylines](#20502) </details> ## Menubar - [MacCatalyst] Fix KeyboardAccelerator with Cmd+Shift modifiers breaks entire MenuBarItem on Mac Catalyst by @KarthikRajaKalaimani in #35318 <details> <summary>🔧 Fixes</summary> - [[Bug] KeyboardAccelerator with Cmd+Shift modifiers breaks entire MenuBarItem on Mac Catalyst](#35279) </details> ## Navigation - [iOS, Mac] Fix OnBackButtonPressed not invoked for NavigationPage and Shell by @Dhivya-SF4094 in #35072 <details> <summary>🔧 Fixes</summary> - [On Screen Back Button Does Not Fire OnBackButtonPressed in Android](#9095) - [ContentPage's OnBackButtonPressed not invoked on iOS and MacCatalyst](#8296) </details> - Fix Android stale ContainerView root leak by @AdamEssenmacher in #35372 <details> <summary>🔧 Fixes</summary> - [Android: Stale ContainerView retains replaced FlyoutPage graph](#35371) </details> - [Android] Fix for predictive back-to-home animation blocked by unconditional back callback registration by @BagavathiPerumal in #35223 <details> <summary>🔧 Fixes</summary> - [OnBackInvokedCallbacks block back-to-home animation](#34594) - [Migrate to OnBackPressedCallback](#24752) </details> - Revert [Android, iOS] - Flyout icon should remain visible when a page is pushed onto a NavigationPage or Shell page with the back button disabled. by @praveenkumarkarunanithi in #35604 ## Picker - [iOS] Fix Picker CharacterSpacing lost after item selection when Title is set by @SyedAbdulAzeemSF4852 in #34974 <details> <summary>🔧 Fixes</summary> - [[iOS] Picker loses CharacterSpacing after item selection when Title is set](#34971) </details> - [iOS] Fix Picker CharacterSpacing ignored on initial load by @SyedAbdulAzeemSF4852 in #34957 <details> <summary>🔧 Fixes</summary> - [[iOS] Picker ignores CharacterSpacing on initial load](#34955) </details> - [Windows] Fix for Picker CharacterSpacing Not Being Applied to Title and Dropdown Items by @SyedAbdulAzeemSF4852 in #30612 <details> <summary>🔧 Fixes</summary> - [[Windows] Picker CharacterSpacing property not applied to Title and PickerItems text](#30464) </details> - Fix Picker SelectedIndex deferred initialization by @AdamEssenmacher in #35629 <details> <summary>🔧 Fixes</summary> - [Picker Attribute "SelectedIndex" Not being respected on page load on Android?](#9150) </details> ## Progressbar - Fix iOS ProgressBar bounding box by @AdamEssenmacher in #35507 <details> <summary>🔧 Fixes</summary> - [[iOS] ProgressBar and Label don't correctly obey height and width at the core level](#7935) </details> ## RadioButton - [Windows, Android] Fix Border Color and Border Width Not applying for Radio Button by @HarishwaranVijayakumar in #35616 <details> <summary>🔧 Fixes</summary> - [[Windows, Android] Border Color and Border Width Not applying for Radio Button.](#35587) </details> - [inflight/current] Fixes a CS0111 build failure in RadioButton.cs caused by a duplicate OnPropertyChanged override by @HarishwaranVijayakumar in #35631 - Revert - Fix TalkBack not correctly narrating RadioButtons with Content by @devanathan-vaithiyanathan in #35625 <details> <summary>🔧 Fixes</summary> - [[Android] MissingMethodException AccessibilityNodeInfoCompat.set_Checked(bool) on 10.0.70 due to AndroidX.Core 1.17 breaking change](#35584) </details> ## Refreshview - [Windows] Fix RefreshView IsRefreshing property not working while binding by @devanathan-vaithiyanathan in #34845 <details> <summary>🔧 Fixes</summary> - [[Windows] RefreshView IsRefreshing property not working while binding](#30535) </details> - [Android] Fix for RefreshView triggering pull-to-refresh when scrolling inside a WebView with internal scrollable content by @BagavathiPerumal in #34614 <details> <summary>🔧 Fixes</summary> - [[Android] RefreshView triggers pull-to-refresh immediately when scrolling up inside a WebView](#33510) </details> ## SafeArea - [Android] Fix bottom safe area padding dropping to zero when keyboard is shown by @praveenkumarkarunanithi in #35084 <details> <summary>🔧 Fixes</summary> - [[Android] Bottom insets issues when keyboard is shown.](#32871) </details> - Gate SafeArea inset listeners in recycler items by @AdamEssenmacher in #35664 <details> <summary>🔧 Fixes</summary> - [[10.0.60] CollectionView scrolling performance regression](#35344) </details> ## ScrollView - [Windows] Fix COMException when restoring a ScrollView as ContentPage.Content after swapping it out by @Vignesh-SF3580 in #35360 <details> <summary>🔧 Fixes</summary> - [COMException when clone a page's content to a object and set it back later in mainthread on Windows](#35277) </details> - Fix - ScrollView.ScrollToAsync(x, y, animated) doesn't work when called from Page.OnAppearing by @Shalini-Ashokan in #35395 <details> <summary>🔧 Fixes</summary> - [[iOS] ScrollView.ScrollToAsync(x, y, animated) doesn't work when called from Page.OnAppearing](#31177) </details> ## Searchbar - [Android] Fix SearchBar IME full-screen extract mode in landscape orientation by @SubhikshaSf4851 in #35197 <details> <summary>🔧 Fixes</summary> - [[Android] Investigate SearchBar presentation in horizontal screen orientation ](#14708) </details> - [iOS 26] Fix SearchBar layout spacing issues for small HeightRequest values by @devanathan-vaithiyanathan in #35347 <details> <summary>🔧 Fixes</summary> - [Spacing problem with maui 10.0.60 iOS](#35286) </details> ## SearchBar - [Windows] Fix SearchHandler does not focus when ShowSoftInputAsync is called by @praveenkumarkarunanithi in #35079 <details> <summary>🔧 Fixes</summary> - [[Windows] SearchHandler.ShowSoftInputAsync() does not focus the SearchHandler](#34930) </details> ## Shell - Fix Android layout jump when navigating with IME open and NavBarIsVisible=false by @jpd21122012 in #34621 <details> <summary>🔧 Fixes</summary> - [Shell page without NavBar jumping when navigating with keyboard open](#34584) </details> - [Android] Add defensive not null check to SearchHandlerAppearanceTracker.FocusChange by @Transis-Felipe in #29939 - [Android] Fix for Shell colors change before navigation completes on Android in .NET 10 by @BagavathiPerumal in #35295 <details> <summary>🔧 Fixes</summary> - [Shell colors change before navigation completes on Android in .NET 10](#35060) </details> - [Windows] Fix Shell FlyoutItem not taking full width by @SubhikshaSf4851 in #35131 <details> <summary>🔧 Fixes</summary> - [MAUI WinUI Grids don't render properly in flyout menu](#19542) - [[Windows] [.NET 8 RC2] FlyoutItem Backgroundcolor Is not fully displaying](#18238) </details> - [Android, iOS, Catalyst] Fix SearchHandler.BackgroundColor cannot be reset to null by @HarishwaranVijayakumar in #35224 <details> <summary>🔧 Fixes</summary> - [[Android, iOS, Catalyst] SearchHandler.BackgroundColor cannot be reset to null](#35088) </details> - Fix for ApplyQueryAttributes being called on non-destination pages during back navigation by @BagavathiPerumal in #35392 <details> <summary>🔧 Fixes</summary> - [ApplyQueryAttributes gets called for not activated (navigated to) page on back](#35183) </details> - [Android] Fix Shell flyout background to follow Material 3 theme colors by @SyedAbdulAzeemSF4852 in #35148 <details> <summary>🔧 Fixes</summary> - [[Android] Shell Flyout ignores Material 3 surface color when UseMaterial3 is enabled](#35147) </details> - [Android] Fix Shell.FlyoutHeader background incorrect by @SyedAbdulAzeemSF4852 in #35489 <details> <summary>🔧 Fixes</summary> - [[Android] Shell.FlyoutHeader background is incorrect](#35416) </details> - [iOS/MacCatalyst] Fix Shell.BackgroundColor not applied to bottom TabBar by @Shalini-Ashokan in #35545 <details> <summary>🔧 Fixes</summary> - [[MacCatalyst] Shell.BackgroundColor not applied to bottom TabBar](#35380) - [[Catalyst] Shell.TabBarBackgroundColor is not applied](#35381) </details> - [Android] Fix Shell FlyoutIcon tint loss after navigation by @SyedAbdulAzeemSF4852 in #35561 <details> <summary>🔧 Fixes</summary> - [[Android] The flyout icon loses colours](#35390) </details> - [iOS] Fix Shell - opened keyboard on modal page shifts parent page/frame behind modal after update to 10.0.60 by @KarthikRajaKalaimani in #35559 <details> <summary>🔧 Fixes</summary> - [[iOS] Shell - opened keyboard on modal page shifts parent page/frame behind modal after update to 10.0.60](#35401) </details> - Fix intermediate pages not receiving query parameters in multi-page Shell navigation by @mattleibow in #35432 <details> <summary>🔧 Fixes</summary> - [Shell GoToAsync: no way to pass query parameters to intermediate pages in multi-segment navigation](#35107) </details> - [Windows] Fix Shell title bar overlap with window controls in RTL mode by @Shalini-Ashokan in #33109 <details> <summary>🔧 Fixes</summary> - [[Windows] Binding RTL FlowDirection in Shell causes Flyout MenuIcon and native window controls to overlap](#32476) </details> - [macOS] Fix IsEnabled property false not working on MenuBarItem by @devanathan-vaithiyanathan in #35546 <details> <summary>🔧 Fixes</summary> - [[macOS] IsEnabled property false not working on MenuBarItem](#34038) </details> - Fix Android Shell top inset when nav bar is hidden by @ne0rrmatrix in #35555 <details> <summary>🔧 Fixes</summary> - [wrong statusbar height when Android device has a notch](#35103) </details> - Fix Changing Content property of ShellContent doesn't change visual content by @devanathan-vaithiyanathan in #34630 <details> <summary>🔧 Fixes</summary> - [Changing Content property of ShellContent doesn't change visual content. ](#12669) </details> - Fixed a NullReferenceException when starting application with empty shell on Windows by @Shalini-Ashokan in #28879 <details> <summary>🔧 Fixes</summary> - [NullReferenceException when starting application with empty shell on Windows](#21562) - [Using SelectionChangedCommand with CollectionView in Shell.FlyoutContent results in Win32 Unhandled Exception](#10041) </details> ## Slider - [iOS] Slider: Scale ThumbImageSource to match default thumb size by @NirmalKumarYuvaraj in #34184 <details> <summary>🔧 Fixes</summary> - [[Slider] MAUI Slider thumb image is big on android](#13258) </details> ## Stepper - Fix iOS 26 Stepper overlap in landscape by @AdamEssenmacher in #35374 <details> <summary>🔧 Fixes</summary> - [[.NET10] D10-The number and buttons overlap after rotating the simulator.](#35211) </details> ## SwipeView - Fix SwipeViews with invoked properties crash the app in Release mode by @BagavathiPerumal in #35208 <details> <summary>🔧 Fixes</summary> - [[iOS/Catalyst] Swipeviews with invoked properties crash the app in Release](#18055) </details> - Fix SwipeItemView command leak by @AdamEssenmacher in #35510 <details> <summary>🔧 Fixes</summary> - [`SwipeItemView.Command` leaks row views and command parameters through `CanExecuteChanged`](#35498) </details> - [iOS/Android] Fix SwipeItem.IsVisible not refreshing native swipe items when binding changes by @SyedAbdulAzeemSF4852 in #35217 <details> <summary>🔧 Fixes</summary> - [SwipeItem.IsVisible doesn't properly refresh the native swipe items when the binding value changes dynamically](#34832) </details> - Fix SwipeView memory leak when SwipeItems are reused or replaced by @Vignesh-SF3580 in #35539 <details> <summary>🔧 Fixes</summary> - [SwipeView leaks when SwipeItems are reused or replaced](#35481) </details> - Fix SwipeItem IconImageSource color handling and rendering across platforms by @Shalini-Ashokan in #35632 <details> <summary>🔧 Fixes</summary> - [[Android] SwipeItem IconImageSource should allow more configuration](#23074) </details> ## Switch - [Android/Windows] Fix RadioButton gradient not clearing when switching background by @Shalini-Ashokan in #34997 <details> <summary>🔧 Fixes</summary> - [RadioButton Background does not reset when set to null at runtime](#34993) </details> - [Windows] Fix "PlatformView cannot be null here" exception during handler disconnect by @kubaflo in #35314 <details> <summary>🔧 Fixes</summary> - ["PlatformView cannot be null here" Exception in Switch control [Windows]](#27101) </details> - [iOS 26] Fix Switch ThumbColor and OffColor not applied on initial load by @SyedAbdulAzeemSF4852 in #35400 <details> <summary>🔧 Fixes</summary> - [iOS 26 Switch default color for Off and On is incorrect + Off Color is not applied at start + Thumb Colors is not applied](#35257) </details> - [Android] Fix AppBar flicker on CheckBox/Switch toggle with Material 3 by @Dhivya-SF4094 in #35181 <details> <summary>🔧 Fixes</summary> - [[Android] AppBar flicker while changing the CheckBox or Switch state after scrolling in Material 3](#35180) </details> - [Android] Fix Switch Shadow Does Not Follow Thumb when Toggle On or Off by @Dhivya-SF4094 in #35623 <details> <summary>🔧 Fixes</summary> - [[Android] Switch Shadow Does Not Follow Thumb when Toggle On or Off](#30046) </details> ## TabbedPage - [Android] Fix TabbedPage truncating tab titles instead of scrolling by @Shalini-Ashokan in #35086 <details> <summary>🔧 Fixes</summary> - [Maui migrating Xamarin to Maui - Tabbed Page Scroll Issue - Tabs are not scrolling](#16470) </details> - [Android] Fix BottomNavigationView remaining visible for TabbedPage inside modal NavigationPage after PushAsync by @Dhivya-SF4094 in #35359 <details> <summary>🔧 Fixes</summary> - [Android TabbedPage inside Modal Navigation does not overlay BottomNavigationView after PushAsync in .NET MAUI 10.0.60](#35331) </details> - [Android & iOS] TabbedPage leaks with shared GradientBrush. by @SubhikshaSf4851 in #35543 <details> <summary>🔧 Fixes</summary> - [TabbedPage leaks renderer/manager when BarBackground uses shared GradientBrush resource](#35469) </details> ## Templates - Bumps Syncfusion.Maui.Toolkit dependency to version 1.0.10 by @PaulAndersonS in #35608 ## Toolbar - Fix Android app bar inset background coloring by @ne0rrmatrix in #35601 <details> <summary>🔧 Fixes</summary> - [Android Edge-to-Edge: Shell and NavigationPage Top Bar colour is not used for status bar.](#35568) </details> ## Tooling - Add default .gitignore to MAUI project templates by @davidortinau in #34862 <details> <summary>🔧 Fixes</summary> - [Add a gitignore file to the Maui template in VS 2022](#4131) </details> - Fix: Propagate AdditionalProperties from ProjectReference in ResizetizeCollectItems by @mattleibow in #35575 <details> <summary>🔧 Fixes</summary> - [Resizetizer GetMauiItems does not propagate ProjectReference AdditionalProperties](#35574) </details> ## WebView - [Windows] Fix WebView blank rendering when used with HybridWebView by @SubhikshaSf4851 in #35092 <details> <summary>🔧 Fixes</summary> - [[Windows] WebView Regression from NET9 to NET10](#34558) </details> - Fix AOT integration test failures: suppress IL3050/IL2026 for HybridWebViewHandler in AddControlsHandlers by @mattleibow via @Copilot in #34868 - Fix Android activity result callback leak by @AdamEssenmacher in #35436 <details> <summary>🔧 Fixes</summary> - [Android WebView file chooser callbacks leak via ActivityResultCallbackRegistry](#35405) </details> - [Windows] Fix WebView Does Not Inherit App Theme by @devanathan-vaithiyanathan in #35037 <details> <summary>🔧 Fixes</summary> - [WebView on Windows Does Not Inherit App Theme](#34823) </details> - Fix for WebView leaks when reusing a shared WebViewSource by @BagavathiPerumal in #35524 <details> <summary>🔧 Fixes</summary> - [WebView leaks when reusing a shared WebViewSource](#35483) </details> - Destroy Android WebView on handler disconnect by @AdamEssenmacher in #35552 <details> <summary>🔧 Fixes</summary> - [Right way to dispose page with WebView](#18021) </details> ## Xaml - Fix: Enable VisualStateManager to set Style property dynamically by @Shalini-Ashokan in #33389 <details> <summary>🔧 Fixes</summary> - [Setting the `Style` property using the `VisualStateManager` within a Style resource does not work](#17175) </details> - Fix Implicit parameter conversion from integer to byte fails with source generated XAML by @KarthikRajaKalaimani in #35444 <details> <summary>🔧 Fixes</summary> - [Implicit parameter conversion from integer to byte fails with source generated XAML](#35396) </details> <details> <summary>🔧 Infrastructure (3)</summary> - Fix: Build fails when appicon is an empty (but valid) SVG by @Shalini-Ashokan in #35305 <details> <summary>🔧 Fixes</summary> - [Build fails when appicon is an empty (but valid) svg after upgrade to 10.0.60](#35293) </details> - [inflight/current] Fix CS0111 duplicate GetNativeCharacterSpacing in PickerHandlerTests.iOS by @SyedAbdulAzeemSF4852 in #35419 - Update WinAppSDK to 1.8.260508005 by @kubaflo in #35678 </details> <details> <summary>🧪 Testing (3)</summary> - Backport Test Fixes and Snapshots from SR to Inflight Branch by @Tamilarasan-Paranthaman in #35499 - Fix hardcoded version of Microsoft.DotNet.XHarness.TestRunners.Xunit in test projects by @akoeplinger in #29905 - [Testing] Fixed Build error on inflight/ candidate PR 35716 by @HarishKumarSF4517 in #35730 </details> <details> <summary>🏠 Housekeeping (1)</summary> - [HouseKeeping] Fix inconsistant namespace in HostApp by @NirmalKumarYuvaraj in #35210 </details> <details> <summary>📦 Other (8)</summary> - Add .cab and ReconnectModal.razor.js to signing config by @jesuszarate in #35026 - Fix typo in Clipboard.shared.cs by @Deadpikle in #35316 - Fix single modifier for NSMenuItem accelerators by @jeremy-visionaid in #35351 - Avoid unnecessary LINQ enumerations by @jeremy-visionaid in #35272 - [Testing] Replace retryDelay with retryTimeout in UI tests by @kubaflo in #35367 - Replace JavaFinalize() with Dispose(bool) in GenericAnimatorListener by @jonathanpeppers in #35548 - Fix incorrect SDK provisioning commands in integration-tests instructions by @davidnguyen-tech in #34992 - Fix VisualElement.ChangeVisualState() gets stuck in Selected state by @Dhivya-SF4094 in #35421 <details> <summary>🔧 Fixes</summary> - [VisualElement's ChangeVisualState gets stuck in Selected state](#35399) </details> </details> <details> <summary>📝 Issue References</summary> Fixes #4131, Fixes #4715, Fixes #5947, Fixes #7150, Fixes #7814, Fixes #7935, Fixes #8296, Fixes #9095, Fixes #9150, Fixes #10041, Fixes #12669, Fixes #13258, Fixes #14708, Fixes #15257, Fixes #16470, Fixes #17175, Fixes #17554, Fixes #17698, Fixes #18021, Fixes #18055, Fixes #18238, Fixes #19542, Fixes #19668, Fixes #20502, Fixes #20615, Fixes #21562, Fixes #22053, Fixes #23074, Fixes #24752, Fixes #27101, Fixes #27627, Fixes #27770, Fixes #27922, Fixes #28514, Fixes #28676, Fixes #28891, Fixes #29411, Fixes #29449, Fixes #30010, Fixes #30046, Fixes #30404, Fixes #30464, Fixes #30535, Fixes #30957, Fixes #31048, Fixes #31177, Fixes #31472, Fixes #31686, Fixes #32279, Fixes #32393, Fixes #32404, Fixes #32457, Fixes #32476, Fixes #32492, Fixes #32731, Fixes #32871, Fixes #33508, Fixes #33510, Fixes #33780, Fixes #34038, Fixes #34104, Fixes #34257, Fixes #34380, Fixes #34522, Fixes #34558, Fixes #34584, Fixes #34594, Fixes #34823, Fixes #34830, Fixes #34832, Fixes #34899, Fixes #34930, Fixes #34955, Fixes #34971, Fixes #34973, Fixes #34993, Fixes #35060, Fixes #35076, Fixes #35088, Fixes #35103, Fixes #35107, Fixes #35113, Fixes #35114, Fixes #35147, Fixes #35180, Fixes #35183, Fixes #35211, Fixes #35214, Fixes #35244, Fixes #35257, Fixes #35277, Fixes #35279, Fixes #35280, Fixes #35286, Fixes #35293, Fixes #35313, Fixes #35326, Fixes #35331, Fixes #35344, Fixes #35354, Fixes #35371, Fixes #35380, Fixes #35381, Fixes #35387, Fixes #35390, Fixes #35396, Fixes #35397, Fixes #35399, Fixes #35401, Fixes #35405, Fixes #35416, Fixes #35429, Fixes #35469, Fixes #35472, Fixes #35473, Fixes #35479, Fixes #35481, Fixes #35483, Fixes #35485, Fixes #35492, Fixes #35495, Fixes #35497, Fixes #35498, Fixes #35513, Fixes #35517, Fixes #35568, Fixes #35573, Fixes #35574, Fixes #35584, Fixes #35587, Fixes #35615, Fixes #35618, Fixes #35651, Fixes #35654 </details> **Full Changelog**: main...inflight/candidate
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