Skip to content

Fix CI for ValidateKeyboardRuntime_SwitchContainerToSoftInput_WhileKeyboardOpen test failure in May 4th Candidate#35307

Merged
kubaflo merged 1 commit into
dotnet:inflight/candidatefrom
devanathan-vaithiyanathan:fix-35083-candidate-failure
May 7, 2026
Merged

Fix CI for ValidateKeyboardRuntime_SwitchContainerToSoftInput_WhileKeyboardOpen test failure in May 4th Candidate#35307
kubaflo merged 1 commit into
dotnet:inflight/candidatefrom
devanathan-vaithiyanathan:fix-35083-candidate-failure

Conversation

@devanathan-vaithiyanathan

Copy link
Copy Markdown
Contributor

Issue Details

PR #35083 fixed the stale safe area issue when switching from All to Container while the keyboard was open.
But that change introduced a regression for the opposite runtime flow.

On iOS, when switching from Container to SoftInput while the keyboard is already open, MauiView may not receive a new keyboard show event. Because the keyboard state was cleared during unsubscribe, the view can miss the current keyboard state and fail to apply the expected keyboard-related bottom inset.

Description of Change

This change updates iOS keyboard handling in MauiView.cs:312. When switching to SoftInput while the keyboard is already open, it restores keyboard state immediately and refreshes layout, so safe area updates correctly.

Issues Fixed

  • ValidateKeyboardRuntime_SwitchContainerToSoftInput_WhileKeyboardOpen

@dotnet-policy-service dotnet-policy-service Bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label May 5, 2026
@Tamilarasan-Paranthaman Tamilarasan-Paranthaman added area-testing Unit tests, device tests community ✨ Community Contribution labels May 5, 2026

@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Expert Review — 1 findings

See inline comments for details.

Comment thread src/Core/src/Platform/iOS/MauiView.cs
@MauiBot MauiBot added s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels May 5, 2026
@sheiksyedm sheiksyedm marked this pull request as ready for review May 6, 2026 08:01
@sheiksyedm

Copy link
Copy Markdown
Contributor

/azp run maui-pr-uitests

@azure-pipelines

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

Comment thread src/Core/src/Platform/iOS/MauiView.cs
@MauiBot

MauiBot commented May 6, 2026

Copy link
Copy Markdown
Collaborator

🤖 AI Summary

👋 @devanathan-vaithiyanathan — new AI review results are available. Please review the latest session below.

📊 Review Session3946692 · fix added · 2026-05-06 22:25 UTC
🚦 Gate — Test Before & After Fix

Gate Result: ⚠️ SKIPPED

No tests were detected in this PR.

Recommendation: Add tests to verify the fix using the write-tests-agent.


🧪 UI Tests — Category Detection

Detected UI test categories: SafeAreaEdges,SoftInput,ViewBaseTests


🔍 Pre-Flight — Context & Validation

Issue: No linked issue — fixing CI test regression introduced by PR #35083 (ValidateKeyboardRuntime_SwitchContainerToSoftInput_WhileKeyboardOpen)
PR: #35307 - Fix CI for ValidateKeyboardRuntime_SwitchContainerToSoftInput_WhileKeyboardOpen test failure in May 4th Candidate
Platforms Affected: iOS only (src/Core/src/Platform/iOS/MauiView.cs)
Files Changed: 1 implementation, 0 test

Key Findings

  • PR [iOS] Fix stale bottom safe area after changing SafeAreaEdges with keyboard open #35083 fixed stale safe area when switching All → Container with keyboard open, but introduced a regression for the Container → SoftInput switch
  • When switching from Container to SoftInput mode, UnsubscribeFromKeyboardNotifications() calls ClearKeyboardState() which sets _isKeyboardShowing = false
  • On re-subscription (SoftInput mode), iOS does NOT re-emit UIKeyboard.WillShowNotification for the already-open keyboard
  • The PR fix rehydrates local keyboard state from KeyboardAutoManagerScroll (static global keyboard tracker) at subscription time
  • Guard conditions: !_isKeyboardShowing && KeyboardAutoManagerScroll.IsKeyboardShowing && !KeyboardAutoManagerScroll.KeyboardFrame.IsEmpty
  • The early-return in SubscribeToKeyboardNotifications() (lines 300-304) ensures rehydration fires exactly once per subscription cycle
  • Review comment from author (resolved): Prior suggestion that used local state didn't work; the current fix uses the global static tracker correctly
  • CI failures (37 jobs) are all cross-platform (WinUI, Android, macOS) and pre-existing on inflight/candidate — unrelated to this iOS-only change

Code Review Summary

Verdict: LGTM
Confidence: high
Errors: 0 | Warnings: 0 | Suggestions: 2

Key code review findings:

  • 💡 SetNeedsLayout() inside SubscribeToKeyboardNotifications() causes a redundant (but harmless) layout cycle when called from ValidateSafeArea() path — second pass exits early
  • 💡 Fix is silently inert if KeyboardAutoManagerScroll.Disconnect() has been called — pre-existing limitation, not a regression

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #35307 Rehydrate _isKeyboardShowing and _keyboardFrame from KeyboardAutoManagerScroll static state when subscribing to keyboard notifications ⚠️ SKIPPED (Gate — no tests detected in PR) MauiView.cs Original PR fix

🔬 Code Review — Deep Analysis

Code Review — PR #35307

Independent Assessment

What this changes: Adds a 12-line "rehydration" block at the end of SubscribeToKeyboardNotifications() in MauiView.cs. When the method registers observers for the first time (observers were previously null), it checks the global KeyboardAutoManagerScroll static state. If the global tracker says the keyboard is already showing but the local MauiView instance doesn't know about it (_isKeyboardShowing == false), the code copies the keyboard frame from the global tracker and marks the local state as showing, invalidated, and schedules a layout pass.

Inferred motivation: A subscribing MauiView instance that was previously unsubscribed (e.g., because it was configured for Container safe-area mode) will miss any UIKeyboard.WillShowNotification that fired while it was not listening. When it later subscribes (because the user switched to SoftInput mode at runtime), iOS won't re-emit WillShow for the already-visible keyboard, so the view would incorrectly think the keyboard is hidden and produce a wrong bottom safe-area inset.


Reconciliation with PR Narrative

Author claims: PR #35083 fixed a stale-safe-area regression when switching All → Container while keyboard is open. The opposite runtime flow (Container → SoftInput) broke: the view misses the keyboard open event and fails to apply the expected bottom inset.

Agreement: Exactly matches what the code does. The early-return guard at lines 300–304 (if (_keyboardWillShowObserver != null || _keyboardWillHideObserver != null) return;) ensures rehydration only fires on the first subscription. Once subscribed, OnKeyboardWillShow / OnKeyboardWillHide maintain the local state normally.


Findings

💡 Suggestion — SetNeedsLayout() inside SubscribeToKeyboardNotifications() is sometimes redundant but harmless

ValidateSafeArea() (line 748) calls UpdateKeyboardSubscription() first, which can call SubscribeToKeyboardNotifications(), which now calls SetNeedsLayout(). Because ValidateSafeArea() is invoked from a layout pass, the SetNeedsLayout() schedules a second layout pass that is immediately redundant (the current pass will still compute the correct safe area, since _safeAreaInvalidated = true is set before the guard check). This is benign — the second layout pass finds _safeAreaInvalidated = false (cleared by the current pass) and returns early — but reviewers should be aware there is a redundant layout cycle when this path is taken from MovedToWindow().

This is not a bug, just worth noting for future maintainers. No code change required.

💡 Suggestion — Fix is silently inert if KeyboardAutoManagerScroll is disconnected

The rehydration relies on KeyboardAutoManagerScroll.IsKeyboardShowing, which is only updated when KeyboardAutoManagerScroll.Connect() is active. If an app has called KeyboardAutoManagerScroll.Disconnect(), the global state will always be false and the fix will not trigger. This is a pre-existing limitation (the SoftInput safe-area path already depends on the global tracker elsewhere), so it is not a regression introduced here. Still worth documenting in the comment.


Devil's Advocate

"Could this fire at the wrong time and apply a stale keyboard frame?"
No. The block guards with both KeyboardAutoManagerScroll.IsKeyboardShowing && !KeyboardAutoManagerScroll.KeyboardFrame.IsEmpty. WillHideKeyboard in KeyboardAutoManagerScroll sets IsKeyboardShowing = false and KeyboardFrame = CGRect.Empty together, so a stale non-empty frame cannot appear while IsKeyboardShowing is false.

"Is there a coordinate-space mismatch between KeyboardAutoManagerScroll.KeyboardFrame and what MauiView._keyboardFrame expects?"
Both use the raw UIKeyboardFrameEndUserInfoKey value (screen coordinates). GetAdjustedSafeAreaInsets() intersects _keyboardFrame with window.Frame, which is also in screen coordinates. No mismatch.

"Could this cause a subscribe/re-entry loop?"
SetNeedsLayout() only schedules a layout for the next run-loop iteration; it does not synchronously invoke layout. No re-entrancy risk.

"Are the CI failures caused by this change?"
No. The change is iOS-only (single file in Platform/iOS/). The failing checks span WinUI, Android, and macOS — consistent with pre-existing failures on the inflight/candidate base branch. The broad blast radius across all platforms confirms these are unrelated.


CI Status

CI has 37 failing checks but all failing jobs are cross-platform (WinUI, Android, macOS, Windows Helix unit tests). The single iOS-only file change cannot account for failures on these platforms. These failures are pre-existing on the inflight/candidate branch and are not attributable to this PR.


Verdict: LGTM

Confidence: high

Summary: The 12-line addition correctly patches the missed-keyboard-event edge case for the Container → SoftInput runtime transition. The guard conditions (!_isKeyboardShowing && IsKeyboardShowing && !KeyboardFrame.IsEmpty) and the early-return for already-subscribed observers ensure the block fires exactly once when needed, and never stale. The two suggestions above are informational only and require no code changes. CI failures are pre-existing and unrelated to this iOS-only change.


🔧 Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix Lazy rehydration in GetAdjustedSafeAreaInsets() — consults KeyboardAutoManagerScroll.IsKeyboardShowing as fallback each layout pass; lazily syncs local state from global tracker ⚠️ BLOCKED MauiView.cs Runs every layout pass (minor perf cost); self-healing
2 try-fix Conditional preservation in UnsubscribeFromKeyboardNotifications() — only clears state when keyboard is actually dismissing; bidirectional reconciliation (phantom-state cleanup + rehydration) on subscribe ⚠️ BLOCKED MauiView.cs More complex; handles additional SoftInput→Container→SoftInput roundtrip scenario
3 try-fix State rehydration in UpdateKeyboardSubscription() — orchestrator method detects first-time subscribe (unsubscribed→subscribed transition) and applies global state ⚠️ BLOCKED MauiView.cs Similar to PR fix but at orchestrator level; cleaner separation of concerns
4 try-fix Always-subscribed approach — never unsubscribes from keyboard notifications; all MauiViews always track keyboard; layout pass gated by ShouldSubscribeToKeyboardNotifications() ⚠️ BLOCKED MauiView.cs Eliminates missed-event problem entirely; performance concern for non-SoftInput views
PR PR #35307 Rehydrate _isKeyboardShowing/_keyboardFrame from KeyboardAutoManagerScroll static at the end of SubscribeToKeyboardNotifications() ⚠️ Gate SKIPPED (no tests in PR) MauiView.cs Original PR; code review LGTM high confidence; author-validated

Cross-Pollination

Model Round New Ideas? Details
claude-opus-4.6 2 No "NO NEW IDEAS" — all three fundamental strategies covered (don't lose state / restore at subscription time / restore at consumption time)

Exhausted: Yes — 4 attempts × distinct approaches, cross-pollination returned NO NEW IDEAS

Selected Fix: PR #35307's fix — Minimal, targeted, placed naturally at subscription time, code-review LGTM (high confidence), author-validated. All try-fix candidates are Blocked (iOS-only fix on Android platform) and cannot be empirically validated.


📋 Report — Final Recommendation

✅ Final Recommendation: APPROVE

Phase Status

Phase Status Notes
Pre-Flight ✅ COMPLETE iOS keyboard safe-area regression; 1 file changed; code review LGTM
Code Review LGTM (high) 0 errors, 0 warnings, 2 suggestions (informational only)
Gate ⚠️ SKIPPED No tests detected in this PR (per gate script)
Try-Fix ✅ COMPLETE 4 attempts, 0 passing (all Blocked — iOS-only fix, Android platform)
Report ✅ COMPLETE

Code Review Impact on Try-Fix

The code review returned LGTM with high confidence and no actionable findings. The two suggestions (redundant SetNeedsLayout() cycle, behavior when KeyboardAutoManagerScroll.Disconnect() was called) were used to shape try-fix hints. Attempt 1 specifically addressed the redundant layout cycle by using lazy evaluation. None of the alternative approaches identified a correctness issue in the PR's fix.

Summary

PR #35307 correctly fixes a regression introduced by PR #35083. The fix restores iOS keyboard state in SubscribeToKeyboardNotifications() by reading from KeyboardAutoManagerScroll (the global static keyboard tracker) when local state was cleared during a Container→SoftInput mode switch. The code review returned LGTM with high confidence. All 4 try-fix alternatives were Blocked due to the iOS-only nature of the fix on an Android CI platform; no alternative approach demonstrated a meaningfully better solution.

Root Cause

When UnsubscribeFromKeyboardNotifications() is called (Container mode), it calls ClearKeyboardState() which sets _isKeyboardShowing = false. On re-subscription (SoftInput mode), iOS does not re-emit UIKeyboard.WillShowNotification for an already-visible keyboard. The local MauiView instance thus incorrectly treats the keyboard as hidden and returns a zero bottom inset instead of the keyboard-height inset.

Fix Quality

The fix is minimal (12 lines), placed at the natural insertion point (SubscribeToKeyboardNotifications), uses the existing KeyboardAutoManagerScroll abstraction that is already relied upon elsewhere in the safe-area path, and has correct guard conditions (!_isKeyboardShowing && IsKeyboardShowing && !KeyboardFrame.IsEmpty) that prevent stale-frame scenarios. The author-resolved review thread confirms the current approach was tested and a prior suggestion was rejected in favor of this one. The note about Gate being SKIPPED is procedural — this PR fixes a specific CI test failure (ValidateKeyboardRuntime_SwitchContainerToSoftInput_WhileKeyboardOpen) and the fix has been confirmed effective by the author.


@MauiBot MauiBot added s/agent-approved AI agent recommends approval - PR fix is correct and optimal and removed s/agent-changes-requested AI agent recommends changes - found a better alternative or issues labels May 6, 2026
@kubaflo kubaflo merged commit 47132b5 into dotnet:inflight/candidate May 7, 2026
118 of 161 checks passed
@github-actions github-actions Bot added this to the .NET 10 SR7 milestone May 7, 2026
github-actions Bot pushed a commit that referenced this pull request May 25, 2026
…yboardOpen test failure in May 4th Candidate (#35307)

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->
### Issue Details
PR #35083 fixed the stale safe area issue when switching from All to
Container while the keyboard was open.
But that change introduced a regression for the opposite runtime flow.
 
On iOS, when switching from Container to SoftInput while the keyboard is
already open, MauiView may not receive a new keyboard show event.
Because the keyboard state was cleared during unsubscribe, the view can
miss the current keyboard state and fail to apply the expected
keyboard-related bottom inset.

### Description of Change

<!-- Enter description of the fix in this section -->
This change updates iOS keyboard handling in MauiView.cs:312. When
switching to SoftInput while the keyboard is already open, it restores
keyboard state immediately and refreshes layout, so safe area updates
correctly.

### Issues Fixed
* ValidateKeyboardRuntime_SwitchContainerToSoftInput_WhileKeyboardOpen
@PureWeen PureWeen mentioned this pull request Jun 2, 2026
PureWeen added a commit that referenced this pull request Jun 2, 2026
## What's Coming

.NET MAUI inflight/candidate introduces significant improvements across
all platforms with focus on quality, performance, and developer
experience. This release includes 85 commits with various improvements,
bug fixes, and enhancements.


## Button
- [Android, iOS] Button: Fix VisualState properties not restored when
leaving custom state by @BagavathiPerumal in
#33346
  <details>
  <summary>🔧 Fixes</summary>

- [Button VisualStates do not
work](#19690)
  </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>

- CarouselView: Fix cascading PositionChanged/CurrentItemChanged events
on collection update by @praveenkumarkarunanithi in
#31275
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] CurrentItemChangedEventArgs and PositionChangedEventArgs
Not Working Properly in
CarouselView](#29529)
  </details>

- [Windows] Fixed ItemSpacing doesn't work in Carousel View by
@SubhikshaSf4851 in #30014
  <details>
  <summary>🔧 Fixes</summary>

- [ItemSpacing on CarouselView is not applied on
Windows.](#29772)
  </details>

- Fix CollectionView not scrolling to top on iOS status bar tap by
@jfversluis in #34687
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] UICollectionView ScrollToTop does not
work](#19866)
  </details>

- [iOS] Fixed CollectionView Scroll Jitter for TextType HTML Labels by
@SubhikshaSf4851 in #34383
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView scrolling is jittery when ItemTemplate contains Label
with TextType="Html" in .NET
10](#33065)
  </details>

- Fix CollectionView Header is not visible when ItemsSource is not set
and an EmptyView is set in iOS, Mac platform by @KarthikRajaKalaimani in
#34989
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView Header is not visible when ItemsSource is not set and
EmptyView is set in iOS, Mac
platform](#34897)
  </details>

- [Android] Fix CollectionView EmptyView not displayed correctly by
@KarthikRajaKalaimani in #34956
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] CollectionView - EmptyView not displayed
correctly](#34861)
  </details>

- [iOS] Fix CollectionView ScrollOffset not resetting when ItemsSource
changes by @SyedAbdulAzeemSF4852 in
#34488
  <details>
  <summary>🔧 Fixes</summary>

- [[IOS] CollectionView ScrollOffset does not reset when the ItemSource
is changed in iOS.](#26366)
- [Re-enable Issue7993 test on iOS/Catalyst - CollectionView scroll
position not reset when updating
ItemsSource](#33500)
  </details>

- [Revert] [iOS] Fixed CollectionView Scroll Jitter for TextType HTML
Labels by @SubhikshaSf4851 in #35341

## Core Lifecycle
- [Android] Fix NRE in ContainerView when Android Context is null during
lifecycle transition by @rmarinho in
#34901
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] NullReferenceException in NavigationRootManager.Connect
when mapping Window
content](#34900)
  </details>

## DateTimePicker
- [Android] Fix for TimePicker Dialog doesn't update the layout when
rotating the device with dialog open by @HarishwaranVijayakumar in
#31910
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] TimePicker Dialog doesn't update the layout when rotating
the device with dialog
open](#31658)
  </details>

- [Android, iOS] Fixed TimePicker FlowDirection Not Applied Across
Platforms by @Dhivya-SF4094 in #30369
  <details>
  <summary>🔧 Fixes</summary>

- [TimePicker FlowDirection Not Working on All
Platforms](#30192)
  </details>

- [Windows] Fixed TimePicker CharacterSpacing issue by @SubhikshaSf4851
in #30533
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] TimePicker CharacterSpacing Property Not Working on
Windows](#30199)
  </details>

- [MacCatalyst] Fix DatePicker Opened/Closed events not being raised by
@SubhikshaSf4851 in #34970
  <details>
  <summary>🔧 Fixes</summary>

- [[MacCatalyst] DatePicker Opened and Closed events are not raised on
Mac platform](#34848)
  </details>

## Dialogalert
- [Android] Fix AlertDialog, ActionSheet, and Prompt render with
Material 2 styles when Material 3 is enabled by @HarishwaranVijayakumar
in #35121
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] AlertDialog, ActionSheet, and Prompt render with Material 2
styles when Material 3 is
enabled](#35119)
  </details>

## Docs
- docs: Add UITesting-Guide, ReleasePlanning, and ReleaseProcess to
docs/README.md index by @PureWeen in
#35195

- docs: Fix hardcoded path and add library overview in Essentials.AI
README by @PureWeen in #35194

- docs: Update branch reference from net10.0 to net11.0 in
DEVELOPMENT.md by @PureWeen in #35193

## Drawing
- Fix Path Rendering Issue Inside StackLayout When Margin Is Set by
@Shalini-Ashokan in #28071
  <details>
  <summary>🔧 Fixes</summary>

- [Path does not render if it has
Margin](#13801)
  </details>

- Fixed FlowDirection property not working on Drawable control and
GraphicsView by @Dhivya-SF4094 in
#34557
  <details>
  <summary>🔧 Fixes</summary>

- [[Android, Windows, iOS, macOS] FlowDirection property not working on
BoxView Control](#34402)
  </details>

- [iOS & Mac] Fix image tile misalignment in GraphicsView ImagePaint by
@SubhikshaSf4851 in #34935
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Image resized with ResizeMode.Fit is not rendered correctly in
GraphicsView](#34755)
  </details>

- Fix Shadow does not honour Styles by @KarthikRajaKalaimani in
#35081
  <details>
  <summary>🔧 Fixes</summary>

- [Shadow does not honour
Styles](#19560)
  </details>

## Entry
- [iOS/macCatalyst] Fix Entry and Editor BackgroundColor reset when set
to null by @Shalini-Ashokan in #34741
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Maccatalyst] Entry & Editor BackgroundColor not reset to
Null](#34611)
  </details>

- [Windows] Fix password Entry crash when setting text on empty field by
@praveenkumarkarunanithi in #33891
  <details>
  <summary>🔧 Fixes</summary>

- [[WinUI] Password Obfuscation causes unhandled
crash](#33334)
  </details>

## Essentials
- [Essentials] Use mean sea level altitude on Android API 34+ by
@KitKeen in #35097
  <details>
  <summary>🔧 Fixes</summary>

- [Add support for MslAltitudeMeters in Essentials Geolocation on
Android](#27554)
  </details>

## Flyout
- Fixed Flyout Not Displayed on Android When FlyoutWidth Is Set Only for
Desktop via OnIdiom by @NanthiniMahalingam in
#29028
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] FlyoutWidth with OnIdiom shows no
flyout](#13243)
  </details>

- Revert "[Windows] Fix Flyout/Locked mode header collapse regression
causing UI test failures on candidate branch" by @kubaflo in
#35339

- Revert "Revert "[Windows] Fix Flyout/Locked mode header collapse
regression causing UI test failures on candidate branch"" by @kubaflo in
#35342

## Flyoutpage
- Fix [Android] Title of FlyOutPage is not updating anymore after
showing a NonFlyOutPage by @KarthikRajaKalaimani in
#34839
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Title of FlyOutPage is not updating anymore after showing a
NonFlyOutPage](#33615)
  </details>

## Label
- [iOS] Fix span Tap gesture on wrapped Label lines in iOS 26+ by
@SubhikshaSf4851 in #34640
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS]Span TapGestureRecognizer does not work on the second line of
the span, if the span is wrapped to the next
line](#34504)
  </details>

## Layout
- Fixed Stacklayout is not rendered when clip is applied and StackLayout
placed child to the Border control in iOS/ Mac platform by
@KarthikRajaKalaimani in #33330
  <details>
  <summary>🔧 Fixes</summary>

- [[Mac/iOS] StackLayout fails to render content while applying Clip,
and the layout is placed inside a Border with Background in .NET
MAUI](#33241)
  </details>

## Map
- Fix Changing Location on a Pin does nothing by @NirmalKumarYuvaraj in
#30201
  <details>
  <summary>🔧 Fixes</summary>

- [[Maps] [Regression from Xamarin.Forms.Maps] Changing Location on a
Pin does nothing](#12916)
  </details>

## Mediapicker
- [iOS] Fix HEIC images picked via PickPhotosAsync not displayed by
@HarishwaranVijayakumar in #34954
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] [Regression] HEIC images picked via PickPhotosAsync not
displayed](#34953)
  </details>

- [Android] Fix MediaPicker.PickPhotosAsync UnauthorizedAccessException
on API 28 and below by @HarishwaranVijayakumar in
#34981
  <details>
  <summary>🔧 Fixes</summary>

- [MediaPicker.PickPhotos fails to modify image, tries to load original
source, fails to load source on Android
9.0](#34889)
  </details>

## Pages
- [iOS] Fix ContentPage with ToolbarItem Clicked event leaks when
presented as modal page by @devanathan-vaithiyanathan in
#35009
  <details>
  <summary>🔧 Fixes</summary>

- [ContentPage with ToolbarItem Clicked event leaks when presented as
modal page](#34892)
  </details>

## Platform
- [Android] Fix OnBackButtonPressed not invoked for Shell by
@Dhivya-SF4094 in #35150
  <details>
  <summary>🔧 Fixes</summary>

- [On Screen Back Button Does Not Fire OnBackButtonPressed in
Android](#9095)
  </details>

## RadioButton
- Fix RadioButtonGroup not working with ContentView by @Dhivya-SF4094 in
#34781
  <details>
  <summary>🔧 Fixes</summary>

- [RadioButtonGroup not working with
ContentView](#34759)
  </details>

- [Windows] Fix for RadioButton BorderColor and BorderWidth not updated
at runtime by @SyedAbdulAzeemSF4852 in
#28335
  <details>
  <summary>🔧 Fixes</summary>

- [RadioButton Border color not working for focused visual
state](#15806)
  </details>

- [iOS] Fix RadioButton BackgroundColor bleeding outside CornerRadius by
@SyedAbdulAzeemSF4852 in #34844
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] RadioButton BackgroundColor bleeds outside
CornerRadius](#34842)
  </details>

## SafeArea
- [iOS] Fix stale bottom safe area after changing SafeAreaEdges with
keyboard open by @praveenkumarkarunanithi in
#35083
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] ContentPage bottom has white space after changing SafeAreaEdges
while keyboard is open](#34846)
  </details>

## ScrollView
- [Windows] Fix Preserve ScrollView offsets when Orientation changes to
Neither by @SubhikshaSf4851 in #34827
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] ScrollView offsets do not preserve when Orientation changes
to Neither](#34671)
  </details>

## Searchbar
- [iOS] Fix SearchBar unexpected left margin in iPad windowed mode on 26
Version by @SubhikshaSf4851 in #34704
  <details>
  <summary>🔧 Fixes</summary>

- [in iPad windowed mode SearchBar adds left margin equivaltent to
SafeAreaInsets when placed inside
grid](#34551)
  </details>

## Shell
- [Windows] Fix for Shell.FlyoutBehavior="Flyout" forces the title
height space above the tab bar even if the page title is empty by
@BagavathiPerumal in #30382
  <details>
  <summary>🔧 Fixes</summary>

- [(Windows) Shell.FlyoutBehavior="Flyout" forces the title height space
above the tab bar even if the page title is
empty](#30254)
  </details>

- Fix Shell flyout items scrolling behind FlyoutHeader on iOS by @Qythyx
in #34936
  <details>
  <summary>🔧 Fixes</summary>

- [Shell flyout items scroll behind FlyoutHeader on
iOS](#34925)
  </details>

- [iOS, Mac] Fix Shell.CurrentState.Location stale in OnNavigated after
GoToAsync by @Vignesh-SF3580 in
#34880
  <details>
  <summary>🔧 Fixes</summary>

- [Shell.OnNavigated not called for route
navigation](#34662)
  </details>

- [iOS26]Fix
BackButtonBehavior_IsEnabled_False_BackButtonDoesNotNavigate UITest
fails by @devanathan-vaithiyanathan in
#34890
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS 26] BackButtonBehavior_IsEnabled_False_BackButtonDoesNotNavigate
test fails with
TimeoutException](#34771)
  </details>

- [iOS] Fix Shell page memory leak when using TitleView with x:Name by
@Shalini-Ashokan in #35082
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Title view memory
leak](#34975)
  </details>

- [Material 3] Fix Material 2 color flash in AppBar when switching tabs
for the first time by @Dhivya-SF4094 in
#35117
  <details>
  <summary>🔧 Fixes</summary>

- [Material 3: AppBar briefly displays Material 2 colors when switching
tabs for the first time](#35116)
  </details>

- [Android] Fix Shell/TabbedPage "More" BottomSheet uses hard-coded M2
colors when Material3 is enabled by @HarishwaranVijayakumar in
#35129
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Shell/TabbedPage "More" BottomSheet uses hard-coded M2
colors when Material3 is
enabled](#35127)
  </details>

- [Android] Shell: Fix top-tab unselected text visibility in Material 3
light theme by @SyedAbdulAzeemSF4852 in
#35128
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Shell top-tab unselected text appears too faint in Material
3 light theme](#35125)
  </details>

- Fix Shell.Items.Clear() memory leak by disconnecting child handlers on
removal (#34898) by @Shalini-Ashokan in
#35031
  <details>
  <summary>🔧 Fixes</summary>

- [Shell.Items.Clear() does not disconnect handlers
correctly](#34898)
  </details>

- [iOS&Mac] Fix Shell SearchHandler Query update on Initial load by
@SubhikshaSf4851 in #35008
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS&Mac] Shell SearchHandler Query not shown in search bar on
initial load](#35005)
  </details>

## SwipeView
- [iOS,MacCatalyst] Fix for SwipeView.Open() throwing an
ArgumentException on the second programmatic call by @BagavathiPerumal
in #34982
  <details>
  <summary>🔧 Fixes</summary>

- [[net 11.0][iOS,MacCatalyst] SwipeView.Open() throws ArgumentException
on second programmatic
call](#34917)
  </details>

- [Android/iOS] Fix SwipeItem visibility change causing double command
execution in Execute mode by @praveenkumarkarunanithi in
#35087
  <details>
  <summary>🔧 Fixes</summary>

- [Changing visibility on an SwipeItem causes multiple items to be
executed](#7580)
  </details>

## Switch
- [iOS] Fix Switch ThumbColor reset on iOS 26+ theme changes. by
@Shalini-Ashokan in #33953
  <details>
  <summary>🔧 Fixes</summary>

- [Switch ThumbColor not Initialized Using VisualStateManager on iOS
Device](#33783)
- [I9-On macOS 26.2, the "Animate scroll" button is white by default on
iOS and Maccatalyst
platforms.](#33767)
  </details>

## TabbedPage
- [Windows] TabbedPage: Refresh layout when NavigationView size changes
by @BagavathiPerumal in #26217
  <details>
  <summary>🔧 Fixes</summary>

- [TabbedPage - ScrollView not allowing scrolling when it
should](#26103)
- [TabbedPage App on resize hides page bottom
content](#11402)
- [Grid overflows child ContentPage of parent TabbedPage on initial load
and when resizing on
Windows](#20028)
  </details>

- [Android] Material 3 Fixed BottomNavigationView overflowing in Tabbed
page by @NirmalKumarYuvaraj in #35064
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Material3 - TabbedPage bottom tabs overflowing the
contents](#35063)
  </details>

- [Windows] Fix for Multiple Tabs Being Selected in WinUI TabbedPage by
@SyedAbdulAzeemSF4852 in #33312
  <details>
  <summary>🔧 Fixes</summary>

- [WinUI TabbedPage can have multiple tabs
selected](#31799)
  </details>

## Theming
- [iOS] Fix StaticResource Hot Reload crash on iOS by @StephaneDelcroix
in #35020
  <details>
  <summary>🔧 Fixes</summary>

- [The maui app quit and no errors in error list after editing
ResourceDictionary XAML file on iOS Simulator with MAUI SR6
10.0.60](#35018)
  </details>

## Toolbar
- [Windows] Fix for CS1061 build error caused by missing
HasMenuBarContent property in MauiToolbar by @BagavathiPerumal in
#35040

## Tooling
- Fix VisualStateGroups duplicate name crash with implicit styles
(#34716) by @StephaneDelcroix in
#34719
  <details>
  <summary>🔧 Fixes</summary>

- [SourceGen: VisualStateManager.VisualStateGroups causes 'Names must be
unique' at startup](#34716)
  </details>

## WebView
- Refactor the HybridWebView and properly support complex parameters by
@mattleibow in #32491

- [Android] Fix WebView scrolling inside ScrollView by @Shalini-Ashokan
in #33133
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] WebView's content does not scroll when placed inside a
ScrollView](#32971)
  </details>


<details>
<summary>🔧 Infrastructure (1)</summary>

- [Windows] Fix Narrator announcing ContentView children twice when
Description is set by @praveenkumarkarunanithi in
#33979
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] SemanticProperties.Description announced twice when set on
focusable container cell (Label
inside)](#33373)
  </details>

</details>

<details>
<summary>🧪 Testing (14)</summary>

- [Testing] SafeArea Feature Matrix Test Cases for ContentPage by
@TamilarasanSF4853 in #34877
- [Windows] Fix CollectionView ScrollTo related test cases failed in CI
by @HarishwaranVijayakumar in #34907
  <details>
  <summary>🔧 Fixes</summary>

- [[Testing][Windows]CollectionView ScrollTo related test cases failed
in CI](#34772)
  </details>
- [Testing] Fixed Build error on inflight/ candidate PR 35234 by
@HarishKumarSF4517 in #35241
- Fix CI for
ValidateKeyboardRuntime_SwitchContainerToSoftInput_WhileKeyboardOpen
test failure in May 4th Candidate by @devanathan-vaithiyanathan in
#35307
- [Windows] Fix Flyout/Locked mode header collapse regression causing UI
test failures on candidate branch by @BagavathiPerumal in
#35312
- [iOS/macCatalyst] [Candidate Fix] Editor shadow and theme regression
caused by BackgroundColor reset on initial handler connection by
@Shalini-Ashokan in #35343
- [Testing] Fixed UI test image failure in PR 35234 - [30/03/2026]
Candidate - 1 by @HarishKumarSF4517 in
#35325
- [iOS] Fix ShellFeatureMatrix test failures on candidate branch by
@Vignesh-SF3580 in #35346
- [Windows] Fix Issue29529VerifyPreviousPositionOnInsert test failure on
candidate branch by @praveenkumarkarunanithi in
#35398
- [Android] [Candidate Fix] Shell: Fix handler disconnect timing to
preserve WebView navigation and memory leak fix by @Shalini-Ashokan in
#35417
- [Testing]Revert 'Fix Preserve ScrollView offsets when Orientation
changes to Neither' by @TamilarasanSF4853 in
#35412
- [Windows] Fix VerifyAllIndicatorDotsShowShadowsWhenIndicatorSize test
failure on candidate branch by @praveenkumarkarunanithi in
#35458
- [Testing] Fixed test failure in PR 35234 - [05/08/2026] Candidate by
@TamilarasanSF4853 in #35362
- [Testing] Fixed test failure in PR 35234 - [05/04/2026] Candidate - 3
by @TamilarasanSF4853 in #35639

</details>

<details>
<summary>📦 Other (6)</summary>

- [UIKit] Avoid useless measure invalidation propagation cycles by
@albyrock87 in #33459
- BindableObject property access micro-optimizations by @albyrock87 in
#33584
- Extract filename from DisplayName and add extension if missing by
@mattleibow in #35050
- [core] Add keyed-DI screenshot extensibility for 3rd-party platform
backends by @Redth in #35096
  <details>
  <summary>🔧 Fixes</summary>

- [`ViewExtensions.CaptureAsync(IView)` and `IPlatformScreenshot` need
extensibility for third-party platform
backends](#34266)
  </details>
- Fix MainThread throwing on custom platform backends by @Redth in
#35070
  <details>
  <summary>🔧 Fixes</summary>

- [`MainThread.BeginInvokeOnMainThread` throws on custom platform
backends - Common UI-thread marshaling pattern crashes; `Dispatcher`
works but isn't the documented/recommended
path](#34101)
  </details>
- Tests: Add 11 missing UnitConverters unit tests by @PureWeen in
#35191

</details>

<details>
<summary>📝 Issue References</summary>

Fixes #7580, Fixes #9095, Fixes #11402, Fixes #12916, Fixes #13243,
Fixes #13801, Fixes #15806, Fixes #19560, Fixes #19690, Fixes #19866,
Fixes #20028, Fixes #26103, Fixes #26366, Fixes #27554, Fixes #29529,
Fixes #29772, Fixes #30192, Fixes #30199, Fixes #30254, Fixes #31658,
Fixes #31799, Fixes #32971, Fixes #33065, Fixes #33241, Fixes #33334,
Fixes #33373, Fixes #33500, Fixes #33615, Fixes #33767, Fixes #33783,
Fixes #34101, Fixes #34257, Fixes #34266, Fixes #34402, Fixes #34504,
Fixes #34551, Fixes #34611, Fixes #34662, Fixes #34671, Fixes #34716,
Fixes #34755, Fixes #34759, Fixes #34771, Fixes #34772, Fixes #34842,
Fixes #34846, Fixes #34848, Fixes #34861, Fixes #34889, Fixes #34892,
Fixes #34897, Fixes #34898, Fixes #34900, Fixes #34917, Fixes #34925,
Fixes #34953, Fixes #34975, Fixes #35005, Fixes #35018, Fixes #35063,
Fixes #35116, Fixes #35119, Fixes #35125, Fixes #35127

</details>

**Full Changelog**:
main...inflight/candidate
@github-actions github-actions Bot locked and limited conversation to collaborators Jun 7, 2026
@PureWeen PureWeen modified the milestones: .NET 10 SR7, .NET 10 SR8 Jun 11, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-testing Unit tests, device tests community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration s/agent-approved AI agent recommends approval - PR fix is correct and optimal s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants